在 SQL 编辑器 中输入查询或创建计算 时,使用Presto SQL 语法 。要调整或计算日期或时间戳数值,您可能会发现这些常用函数非常有用。
注意 :链中的运行时变量,如用于日期和时间转换的变量,使用 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
函数 DATE_ADD(unit,value,timestamp)。对于单元,DATE_ADD
支持:
毫秒
附议
分钟
时
天
周
月
某个季度
年
例如,SELECT DATE_ADD('日', 10, "2020-06-15")
返回2020-06-25。
注意: 要将 IS08601 格式的字符串解析为日期值,请使用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 对象,您可能需要对其他对象进行转换才能使用该函数。
注意: 要将 IS08601 格式的字符串解析为日期值,请使用FROM_ISO8601_DATE
函数,例如FROM_ISO8601_DATE('2020-06-15')
。
日期格式
要以设定的格式返回日期或时间戳值,请使用DATE_FORMAT
函数 DATE_FORMAT(timestamp,format)。对于格式,DATE_FORMAT
支持这些值的组合:
格式 | 说明 |
---|---|
%a |
星期的简称,从Sun 到Sat |
%b |
缩写月份名称,从Jan 到Dec |
%c |
数字月份值,从1 到12 |
%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 |
月份名称,从1 月 到12 月 |
%m |
数字月份值为两位数,从01 到12 |
%p |
12 小时时钟的上午 或下午 |
%r |
12 小时钟表上的时间,如hh:mm:ss 后跟AM 或PM |
%s 或%S |
第二,从00 到59 |
%T |
24 小时时钟上的时间,如hh:mm:ss |
%v |
一年中的星期,从01 到53 ,其中星期一是一周的第一天;与%x 一起使用 |
%W |
星期名称,从星期日 到星期六 |
%x |
星期一是一周第一天的年份;与%v 一起使用 |
%Y |
年份,四位数 |
%y |
年份,以两位数表示 注: 解析时, |
%% |
字面% 字符 |
注: 要以数字形式返回星期,从1
到7
,请使用DAY_OF_WEEK
函数。
日
要从日期或时间戳返回本月的日期(从 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)。
from_iso8601_date
要将 ISO8601 格式的字符串解析为日期,请使用FROM_ISO8601_DATE
函数,例如 FROM_ISO8601_DATE(date_value)。
间隔
要添加或减去日期或时间戳的间隔单位值,可使用INTERVAL
函数和+
或-
操作符,如 +/- INTERVAL值 单位 。对于单位,INTERVAL
支持与DATE_ADD
相同的值。例如
-
DATE '2020-08-08' + INTERVAL '2' day
返回2020-08-10. -
TIMESTAMP '2020-08-08 01:00' + INTERVAL '29' 小时
返回2020-08-09 06:00:00.000. -
INTERVAL '2' day + INTERVAL '3' hour
返回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 。