当 您在 SQL编辑器中输入查询或创建 计算时,您将使用 PrestoSQL语法。要调整日期或时间戳值或对其进行计算,您可能会发现以下常用函数很有用。
注意:链中的运行时变量(例如用于 日期和时间转换的变量 )使用 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 函数。例如, SELECT CURRENT_DATE()。
日期
要将值转换为日期值,请使用DATE 函数,例如 DATE(value)。
日期添加
要将间隔单位值添加到日期或时间戳,请使用 DATE_ADD 函数,例如 DATE_ADD(unit, value, timestamp)。对于 单元, DATE_ADD 支持:
毫秒秒分钟小时天周月四分之一年
例如,SELECT DATE_ADD('day', 10, "2020-06-15") 返回2020-06-25。
注意:要将 ISO8601 格式的字符串解析为日期值,请使用 FROM_ISO8601_DATE 函数,例如 FROM_ISO8601_DATE('2020-06-15')。
日期差
要返回两个日期或时间戳值的差值,请使用 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 对象,您可能需要强制转换其他对象才能使此函数正常工作。
注意:要将 ISO8601 格式的字符串解析为日期值,请使用 FROM_ISO8601_DATE 函数,例如 FROM_ISO8601_DATE('2020-06-15')。
日期格式
要以指定格式返回日期或时间戳值,请使用 DATE_FORMAT 函数,例如 DATE_FORMAT(timestamp, format)。对于 格式, DATE_FORMAT 支持以下值的组合:
| 格式 | 描述 |
|---|---|
%一个 |
星期几的缩写名称,从星期日 到 星期六 |
%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到
|
%H |
24 小时制时钟的小时数,以两位数表示,从00 到23 |
%h或%I |
12 小时制时钟的小时数,以两位数表示,从00 到12 |
%我 |
分钟,从00 到59 |
%j |
一年中的日期,以三位数表示,从000 到366 |
%k |
24 小时制时钟的小时数,从0 到23 |
%l |
12 小时制时钟的小时数,从0 到12 |
%M |
月份名称,从 一月 到 十二月 |
%m |
月份数值,以两位数表示,范围从 01 到12 |
%p |
AM或PM 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 函数
。 7 的数字形式天
要从日期或时间戳返回月份中的日期(1 到 31 之间的数字),请使用 DAY 函数,例如 DAY(date_value)。例如, SELECT DAY("2020-06-15") 返回 15。
星期几
要从日期或时间戳返回星期几(从 1 表示星期一到 7 表示星期日),请使用 DAY_OF_WEEK 函数,例如 DAY_OF_WEEK(date_value)。
EOMONTH
要从日期或时间戳返回该月的最后一天的编号,请使用EOMONTH 函数,例如 EOMONTH(date_value, month_number_value)。
来自 ISO8601 日期
要将 ISO8601 格式的字符串解析为日期,请使用 FROM_ISO8601_DATE 函数,例如 FROM_ISO8601_DATE(date_value)。
间隔
要为日期或时间戳添加或减去间隔单位值,请使用带有+ 或- 运算符的INTERVAL函数,例如 +/- INTERVALvalue unit。对于 单位, INTERVAL 支持与 DATE_ADD相同的值。例如:
-
DATE '2020-08-08' + INTERVAL '2' day返回 2020-08-10。 -
TIMESTAMP '2020-08-08 01:00' + INTERVAL '29' hour返回 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。
月
要从日期或时间戳返回月份(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。
年
要从日期或时间戳返回年份(1000 到 9990 之间的数字),请使用 YEAR 函数,例如 YEAR(date_value)。例如, SELECT YEAR("2020-06-15") 返回 2020。