當您在 SQL 編輯器中輸入查詢 或建立計算, 您使用Presto SQL 語法 。要調整或執行日期或時間戳值的計算,您可能會發現這些常見函數很有用。
注意: Chains 中的運行時間變數,例如用於日期和時間轉換的變數,使用 Python strftime 而不是 Presto SQL。
時區
若要轉換時區 的時間戳記,請使用AT TIME ZONE 運算符號。例如:
SELECT cast(timestamp '2020-10-31 01:00 UTC' as VARCHAR) 2020-10-31 01:00:00.000 UTC SELECT cast(timestamp '2020-10-31 01:00 UTC' AT TIME ZONE 'America/Los_Angeles' as VARCHAR) 2020-10-30 18:00:00.000 America/Los_Angeles
提示: 在大多數地區,您可以使用America/Los_Angeles 代表太平洋時區,America/Denver 代表山地時區,America/Chicago 代表中部時區,America/New_York 代表東部時區。
CURRENT_DATE
要返回查詢執行的日期,請使用CURRENT_DATE 函式。例如,SELECT CURRENT_DATE() 。
DATE
要將值轉換為日期值,請使用DATE 函數 DATE(value)。
DATE_ADD
若要在日期或時間戳中加入間隔單位值,請使用DATE_ADD 函式,如 DATE_ADD(unit,value,timestamp). 對於單位,DATE_ADD 支援:
毫秒秒分小時天週月季度年
例如,SELECT DATE_ADD('day', 10, "2020-06-15") 返回2020-06-25。
注意: 要解析一個 IS08601 格式的字串作為日期值,請使用FROM_ISO8601_DATE 函式,如FROM_ISO8601_DATE('2020-06-15') 。
DATE_DIFF
要返回兩個日期或時間戳記的差值,使用DATE_DIFF 函數 DATE_DIFF(unit,timestamp1,timestamp 2). 對於單元,DATE_DIFF 支援與DATE_ADD 相同的值。例如,SELECT DATE_DIFF('day', "2020-06-15", "2020-06-25") 返回10 。
請注意DATE_DIFF 僅適用於 Date 物件,您可能需要轉換其他物件才能使用此函式。
注意: 若要解析 IS08601 格式的字串作為日期值,請使用FROM_ISO8601_DATE 函式,例如FROM_ISO8601_DATE('2020-06-15') 。
DATE_FORMAT
若要以設定的格式傳回日期或時間戳值,請使用DATE_FORMAT 函式,如 DATE_FORMAT(timestamp,format)。對於格式,DATE_FORMAT 支援這些值的組合:
| 格式 | 說明 |
|---|---|
%a |
星期的簡稱,從Sun 到Sat |
%b |
簡稱月份名稱,從Jan 到Dec |
%c |
數字月份值,從1 到12 |
%D
|
Numeric day of the month with its suffix, such as 1st,
2nd, 3rd...
|
%d |
以兩位數字表示的每月日期,從01 到31 |
%e |
數位月日,從1 到31 |
%f |
毫秒,從000000 到999000 用於列印;從0 到999999999 用於解析 |
%H |
24 小時時鐘的小時為兩位數字,從00 到23 |
%h 或%I |
12 小時時鐘的小時數為兩位數字,從00 到12 |
%i |
分鐘,從00 到59 |
%j |
以三位數字表示的年日,從000 到366 |
%k |
24 小時時鐘的小時,從0 到23 |
%l |
12 小時時鐘的小時,從0 到12 |
%M |
月份名稱,從一月 到十二月 |
%m |
數字月份值為兩位數字,從01 到12 |
%p |
12 小時時鐘的上午 或下午 |
%r |
12 小時時鐘上的時間,如hh:mm:ss 之後的AM 或PM |
%s 或%S |
秒,從00 到59 |
%T |
24 小時時鐘上的時間,以hh:mm:ss 表示 |
%U
|
Week of the year, from 00 to 53,
where Sunday is the first day of the week
|
%u
|
Week of the year, from 00 to 53,
where Monday is the first day of the week
|
%V
|
Week of the year, from 01 to 53,
where Sunday is the first day of the week; used with %X
|
%v |
一年中的一周,從01 到53 ,其中星期一是一周的第一天;與%x 一起使用 |
%W |
週日的名稱,從週日 到週六 |
%w
|
Day of the week, from 0 to 6,
where Sunday is the first day of the week
|
%X
|
Year for when Sunday is the first day of the week; used with %V
|
%x |
星期一為一週第一天的年份;與%v 搭配使用 |
%Y |
年份,為四位數字 |
%y |
年份,為兩位數字 注意: 解析時, |
%% |
字面% 字元 |
註: 若要以數字傳回星期,從1 到7 ,請使用DAY_OF_WEEK 函式。
日
要從日期或時間戳記返回每月的天數(1 到 31 的數字),請使用DAY 函數作為 DAY(date_value)。例如,SELECT DAY("2020-06-15") 返回15 。
DAY_OF_WEEK
若要根據日期或時間戳記,以一個從1 (星期一) 到7 (星期日) 的數字來傳回星期的天數,請使用DAY_OF_WEEK 函式,如 DAY_OF_WEEK(date_value)。
EOMONTH
要從日期或時間戳記返回該月最後一天的數字,請使用EOMONTH 函式,例如 EOMONTH(date_value, month_number_value) 。
FROM_ISO8601_DATE
要將 ISO8601 格式的字串解析為日期,請使用FROM_ISO8601_DATE 函式,例如 FROM_ISO8601_DATE(date_value)。
INTERVAL
要增加或減少日期或時間戳記的間隔單位值,請使用INTERVAL 函數,並加上+ 或- 運算符號,例如 +/- INTERVALvalue unit 。對於單位,INTERVAL 支援與DATE_ADD 相同的值。例如:
-
DATE '2020-08-08' + INTERVAL '2' 天返回2020-08-10. -
TIMESTAMP '2020-08-08 01:00' + INTERVAL '29' 小時返回2020-08-09 06:00:00.000. -
INTERVAL '2「 天 + INTERVAL 」3' 小時返回2 03:00:00.000. -
TIMESTAMP '2020-10-31 01:00' - INTERVAL '1' month返回2020-09-30 01:00:00.000.
MONTH
要返回日期或時間戳記的月份(從 1 到 12 的數字),請使用MONTH 函數 MONTH(date_value)。 例如,SELECT MONTH("2020-06-15") 返回6 。
眼下排班|目前相關資訊
要返回查詢執行時的時間戳記,請使用NOW 函式。例如,SELECT NOW() 。
季度
要根據日期或時間戳記,以 1 到 4 的數字返回一年的季度,請使用QUARTER 函數 QUARTER(date_value)。 例如,SELECT QUARTER("2020-06-15") 返回2 。
YEAR
要從日期或時間戳記返回年份(從 1000 到 9990 的數字),請使用YEAR 函數 YEAR(date_value)。 例如,SELECT YEAR("2020-06-15") 返回2020 。