数据湖计算 DLC 日期时间函数

这篇档详细介绍了腾讯云支持的日期和时间函数,涵盖SparkSQL和Presto引擎的语法、使用说明、返回类型及示例。函数包括日期转换(如DATE、TIMESTAMP)、日期计算(如ADD_MONTHS、DATEDIFF)、时间戳处理(如FROM_UNIXTIME、TO_TIMESTAMP)、时区转换(如TO_UTC_TIMESTAMP)以及日期部分提取(如EXTRACT、DATE_PART)等。基础转换函数:- DA。

相关产品
数据湖计算 DLC 产品页,含版本规格、价格与购买入口。

一、DATE

·函数语法:

DATE(<expr> date|timestamp|string)

·支持引擎:SparkSQL、Presto 。

·使用说明:强制类型转换为 date 。

·返回类型:date 。

·示例:

> select date('2022-02-02'); 2022-02-02

二、TIMESTAMP

·函数语法:

TIMESTAMP(<expr> date|timestamp|string)

·支持引擎:SparkSQL、Presto。

·使用说明:强制类型转换为 timestamp。

·返回类型:timestamp。

·示例:

> select timestamp('2022-02-02 11:11:11'); 2022-02-02 11:11:11

三、ADD_MONTHS

·函数语法:

ADD_MONTHS(<start_date> date|timestamp|string, <num> integer)

·支持引擎:SparkSQL、Presto。

·使用说明:返回 start_date 之后的 num 个月的日期。

·返回类型:date。

·示例:

> SELECT add_months('2016-08-31', 1); 2016-09-30

四、CURRENT_DATE

·函数语法:

CURRENT_DATE

·支持引擎:SparkSQL、Presto。

·使用说明:返回查询计算开始时的当前日期。

·返回类型:date。

·示例:

> SELECT CURRENT_DATE; 2022-07-27

五、CURRENT_TIMESTAMP

·函数语法:

CURRENT_TIMESTAMP

·支持引擎:SparkSQL、Presto。

·使用说明:返回查询计算开始时的当前时间戳。

·返回类型:timestamp。

·示例:

> SELECT CURRENT_TIMESTAMP; 2022-07-27 18:06:00.632

六、CURRENT_TIMEZONE

·函数语法:

CURRENT_TIMEZONE(

·支持引擎:SparkSQL、Presto。

·使用说明:返回当前会话本地时区。

·返回类型:string。

·示例:

> select CURRENT_TIMEZONE();Asia/Shanghai

七、DATEDIFF

·函数语法:

DATEDIFF(<end> date|timestamp|string, <start> date|timestamp|string)

·支持引擎:SparkSQL、Presto。

·使用说明:返回从 start 到 end 的天数。

·返回类型:integer。

·示例:

> SELECT datediff('2009-07-31', '2009-07-30'); 1> SELECT datediff('2009-07-30', '2009-07-31'); -1

八、DATE_ADD

·函数语法:

DATE_ADD(<start_dates> date|timestamp|string, <num> integer)

·支持引擎:SparkSQL、Presto。

·使用说明:返回 start_date 后 num 天的日期。

·返回类型:date。

·示例:

> SELECT date_add('2016-07-30', 1); 2016-07-31

九、DATE_FORMAT

·函数语法:

DATE_FORMAT(<ts> date|timestamp|string, <format> string)

·支持引擎:SparkSQL、Presto。

·使用说明:将时间戳转换指定日期格式 format 的字符串值。

·返回类型:string。

·示例:

> SELECT date_format('2016-04-08', 'y'); 2016

十、DATE_SUB

·函数语法:

DATE_SUB(<start_date> date|timestamp|string, <num> integer)

·支持引擎:SparkSQL、Presto。

·使用说明:返回 start_date 前 num 天的日期。

·返回类型:date。

·示例:

> SELECT date_sub('2016-07-30', 1); 2016-07-29

十一、DAY

·函数语法:

DAY(<d> date|timestamp|string)

·支持引擎:SparkSQL、Presto。

·使用说明:计算日期/时间戳 d 是这个月的第几天。

·返回类型:integer。

·示例:

> SELECT day('2009-07-30'); 30

十二、DAYOFYEAR

·函数语法:

DAYOFYEAR(<d> date|timestamp|string)

·支持引擎:SparkSQL、Presto。

·使用说明:计算 d 是这年的第几天。

·返回类型:integer。

·示例:

> SELECT dayofyear('2016-04-09'); 100

十三、DAYOFMONTH

·函数语法:

DAYOFMONTH(<d> date|timestamp|string)

·支持引擎:SparkSQL、Presto。

·使用说明:计算日期/时间戳 d 是这个月的第几天。

·返回类型:integer。

·示例:

> SELECT dayofmonth('2009-07-30'); 30

十四、EXTRACT

·函数语法:

EXTRACT(<field> string FROM <source> date|timestamp|interval)

·支持引擎:SparkSQL、Presto。

·使用说明:从 source 中提取 field 指定的部分,其中,SparkSQL 支持 source 类型为 date/timestamp/interval ,Presto 支持 source 类型为date/timestamp。

·对于 source 类型为 date/timestamp,filed 可取值:

(1)"YEAR", ("Y", "YEARS", "YR", "YRS") – 获取给定日期中的年份字段。

(2)"YEAROFWEEK" – 获取某个日期所属的 ISO 8601 周编号年。例如,2005年1月2日属于2004年的第53周,因此结果是2004年。

(3)"QUARTER", ("QTR") – 获取给定日期中的季度字段。

(4)"MONTH", ("MON", "MONS", "MONTHS") – 获取给定日期中的月份字段。

(5)"WEEK", ("W", "WEEKS") – ISO 8601 周编号年中的周数。

(6)"DAY", ("D", "DAYS") – 获取给定日期中的天字段 (1 – 31)。

(7)"DAYOFWEEK",("DOW") – 获取给定日期在当周的天数,即周一至周日。

(8)"DAYOFWEEK_ISO",("DOW_ISO") – 基于 ISO 8601 标准的日期时间星期几表示。

(9)"DOY" – 获取给定日期在一年中的天数 (1 – 365/366)。

(10)"HOUR", ("H", "HOURS", "HR", "HRS") – 获取给定日期中的小时字段 (0 – 23)。

(11)"MINUTE", ("M", "MIN", "MINS", "MINUTES") – 获取给定日期中的分钟字段 (0 – 59)。

(12)"SECOND", ("S", "SEC", "SECONDS", "SECS") – 获取给定日期中的秒字段,包括小数部分。

·对于 source 类型为 interval,field 可取值:

(1)"YEAR", ("Y", "YEARS", "YR", "YRS") – 总月数 / 12

(2)"MONTH", ("MON", "MONS", "MONTHS") – 总月数 % 12

(3)"DAY", ("D", "DAYS")- 获取给定 interval 中的天数

(4)"HOUR", ("H", "HOURS", "HR", "HRS") – 微秒中包含的小时数

(5)"MINUTE", ("M", "MIN", "MINS", "MINUTES") – 从微秒中提取小时后剩余的分钟数

(6)"SECOND", ("S", "SEC", "SECONDS", "SECS") – 从微秒中提取小时和分钟后剩余的秒数

·返回类型

·SparkSQL:根据 filed 类型不同返回类型不同

·Presto:bigint

·示例:

> SELECT extract(YEAR FROM TIMESTAMP '2019-08-12 01:00:00.123456'); 2019> SELECT extract(week FROM timestamp'2019-08-12 01:00:00.123456'); 33> SELECT extract(doy FROM DATE'2019-08-12'); 224> SELECT extract(SECONDS FROM timestamp'2019-10-01 00:00:01.000001'); 1.000001> SELECT extract(days FROM interval 5 days 3 hours 7 minutes); 5> SELECT extract(seconds FROM interval 5 hours 30 seconds 1 milliseconds 1 microseconds); 30.001001> SELECT extract(MONTH FROM INTERVAL '2021-11' YEAR TO MONTH); 11> SELECT extract(MINUTE FROM INTERVAL '123 23:55:59.002001' DAY TO SECOND); 55

十五、FROM_UNIXTIME

·函数语法:

FROM_UNIXTIME(<unix_time> bigint[, <fmt> string])

·支持引擎:SparkSQL、Presto。

·使用说明:以格式 fmt 返回 unix_time 所代表的日期/时间。如果省略 fmt,则使用 'yyyy-MM-dd HH:mm:ss'。

·返回类型:string。

·示例:

> SELECT from_unixtime(0, 'yyyy-MM-dd HH:mm:ss'); 1969-12-31 16:00:00> SELECT from_unixtime(0); 1969-12-31 16:00:00

十六、FROM_UTC_TIMESTAMP

·函数语法:

FROM_UTC_TIMESTAMP(<ts> timestamp, <timezone> string)

·支持引擎:SparkSQL、Presto。

·使用说明:给定 utc 时间戳并将该时间呈现为给定时区的时间戳。

·返回类型:timestamp。

·示例:

> SELECT from_utc_timestamp('2016-08-31', 'Asia/Seoul'); 2016-08-31 09:00:00

十七、HOUR

·函数语法:

HOUR(<ts> string|timestamp)

·支持引擎:SparkSQL、Presto。

·使用说明:返回指定时间戳 ts 的小时部分。

·返回类型:integer。

·示例:

> SELECT hour('2009-07-30 12:58:59'); 12

十八、LAST_DAY

·函数语法:

LAST_DAY(<d> date|string)

·支持引擎:SparkSQL、Presto。

·使用说明:返回日期 d 当前这个月的最后一天。

·返回类型:date。

·示例:

> SELECT last_day('2009-01-12'); 2009-01-31

十九、MINUTE

·函数语法:

MINUTE(<ts> timestamp|string)

·支持引擎:SparkSQL、Presto。

·使用说明:返回时间戳 ts 的分钟。

·返回类型:integer。

·示例:

> SELECT minute('2009-07-30 12:58:59'); 58

20、MONTH

·函数语法:

MONTH(<d> date|timestamp|string)

·支持引擎:SparkSQL、Presto。

·使用说明:返回日期 d 的月份。

·返回类型:integer。

·示例:

> SELECT month('2016-07-30'); 7

21、MONTHS_BETWEEN

·函数语法:

MONTHS_BETWEEN(<ts1> date|timestamp|string, <ts2> date|timestamp|string, <roundOff> boolean)

·支持引擎:SparkSQL、Presto。

·使用说明:如果 ts1 晚于 ts2,则结果为正。如果 ts1 和 ts2 在当月的同一天,或两者都是当月的最后一天,则将忽略当天的时间。否则,差值根据每月31天计算,并四舍五入到8位,除非 roundOff 为false。

·返回类型:double

·示例:

> SELECT months_between('1997-02-28 10:30:00', '1996-10-30'); 3.94959677> SELECT months_between('1997-02-28 10:30:00', '1996-10-30', false); 3.9495967741935485

22、NEXT_DAY

·函数语法:

NEXT_DAY(<start_date> date|timestamp|string, <day_of_week> string

·支持引擎:SparkSQL、Presto。

·使用说明:返回start_date后的第一个指定星期。

·返回类型:
SparkSQL:date
Presto:string

·示例:

> SELECT next_day('2015-01-14', 'TU'); 2015-01-20

23、NOW

·函数语法:

NOW()

·支持引擎:SparkSQL、Presto。

·使用说明:返回当前时间戳。

·返回类型:timestamp。

·示例:

> SELECT now(); 2020-04-25 15:49:11.914

24、QUARTER

·函数语法:

QUARTER(<d> date|timestamp|string)

·支持引擎:SparkSQL、Presto。

·使用说明:返回 d 所在季度。

·返回类型:integer。

·示例:

> SELECT quarter('2016-08-31'); 3

25、SECOND

·函数语法:

SECOND(<ts> timestamp|string)

·支持引擎:SparkSQL、Presto。

·使用说明:返回当前时间戳的秒数。

·返回类型:integer。

·示例:

> SELECT second('2009-07-30 12:58:59'); 59

26、TO_TIMESTAMP

·函数语法:

TO_TIMESTAMP(<ts_str> string[, <fmt> string]

·支持引擎:SparkSQL、Presto。

·使用说明:将 fmt 格式的 ts_str 表达式解析为时间戳。输入无效则返回 NULL。默认情况下,如果省略 fmt,它将遵循时间戳的强制转换规则。结果数据类型与配置值一致。

·返回类型:timestamp。

·示例:

> SELECT to_timestamp('2016-12-31 00:12:00'); 2016-12-31 00:12:00> SELECT to_timestamp('2016-12-31', 'yyyy-MM-dd'); 2016-12-31 00:00:00

27、TO_DATE

·函数语法:

TO_DATE(<date_str> string[, <fmt> string])

·支持引擎:SparkSQL、Presto。

·使用说明:将 fmt 格式的 date_str 表达式解析为日期。输入无效则返回 NULL。默认情况下,如果省略 fmt,它将遵循日期的强制转换规则。结果数据类型与配置值一致。

·返回类型:date。

·示例:

> SELECT to_date('2009-07-30 04:17:52'); 2009-07-30> SELECT to_date('2016-12-31', 'yyyy-MM-dd'); 2016-12-31

28、TO_UNIX_TIMESTAMP

·函数语法:

TO_UNIX_TIMESTAMP(<ts> date|timestamp|string[, <fmt> string])

·支持引擎:SparkSQL、Presto。

·使用说明:返回 ts 的 unix 时间戳。

·返回类型:bigint。

·示例:

> SELECT to_unix_timestamp('2016-04-08', 'yyyy-MM-dd'); 1460098800

29、TO_UTC_TIMESTAMP

·函数语法:

— SparkSQLTO_UTC_TIMESTAMP(<ts> date|timestamp|string, <timezone> string)– PrestoTO_UTC_TIMESTAMP(<ts> date|timestamp|string|interger|double|decimal, <timezone> string)

·支持引擎:SparkSQL、Presto。

·使用说明:将给定时区中的时间戳转换为 UTC。

·返回类型:timestamp。

·示例:

— SparkSQL> SELECT to_utc_timestamp('2016-08-31', 'Asia/Seoul'); 2016-08-30 15:00:00– Presto> select to_utc_timestamp(10000, 'UTC'); 1970-01-01 08:00:10

30、TRUNC

·函数语法:

TRUNC(<d> date|string, <fmt> string)

·支持引擎:SparkSQL、Presto。

·使用说明:返回将日期 d 按照 fmt 指定的时间单位进行截取后的日期值。

·返回类型:date。

·示例:

> SELECT trunc('2019-08-04', 'week'); 2019-07-29> SELECT trunc('2019-08-04', 'quarter'); 2019-07-01> SELECT trunc('2009-02-12', 'MM'); 2009-02-01> SELECT trunc('2015-10-27', 'YEAR'); 2015-01-01

31、DATE_TRUNC

·函数语法:

DATE_TRUNC(<fmt> string, <ts> date|timestamp|string)

·支持引擎:SparkSQL、Presto。

·使用说明:返回将时间戳 ts 按照 fmt 截断后的时间戳 。

·返回类型:timestamp。

·示例:

> SELECT date_trunc('YEAR', '2015-03-05T09:32:05.359'); 2015-01-01 00:00:00> SELECT date_trunc('MM', '2015-03-05T09:32:05.359'); 2015-03-01 00:00:00> SELECT date_trunc('DD', '2015-03-05T09:32:05.359'); 2015-03-05 00:00:00> SELECT date_trunc('HOUR', '2015-03-05T09:32:05.359'); 2015-03-05 09:00:00> SELECT date_trunc('MILLISECOND', '2015-03-05T09:32:05.123456'); 2015-03-05 09:32:05.123

32、UNIX_TIMESTAMP

·函数语法:

UNIX_TIMESTAMP([<ts> date|timestamp|string[, fmt]])

·支持引擎:SparkSQL、Presto。

·使用说明:返回当前或指定时间的 UNIX 时间戳。

·返回类型:bigint。

·示例:

> SELECT unix_timestamp(); 1476884637> SELECT unix_timestamp('2016-04-08', 'yyyy-MM-dd'); 1460041200

33、DAYOFWEEK

·函数语法:

DAYOFWEEK(<d> date|timestamp|string)

·支持引擎:SparkSQL、Presto。

·使用说明:返回日期/时间戳“d”是星期几。返回值范围是 1~7 ,其中:

1 = Sunday(星期日)

2 = Monday(星期一)

3 = Tuesday(星期二)

4 = Wednesday(星期三)

5 = Thursday(星期四)

6 = Friday(星期五)

7 = Saturday(星期六)

·返回类型:integer。

·示例:

> SELECT dayofweek('2009-07-30'); 5

34、WEEKDAY

·函数语法:

WEEKDAY(<d> date|timestamp|string)

·支持引擎:SparkSQL、Presto。

·使用说明:返回日期/时间戳“d”是星期几。返回值范围是 0~6 ,其中:

0 = Monday(星期一)

1 = Tuesday(星期二)

2 = Wednesday(星期三)

3 = Thursday(星期四)

4 = Friday(星期五)

5 = Saturday(星期六)

6 = Sunday(星期日)

·返回类型:integer。

·示例:

> SELECT weekday('2009-07-30'); 3

35、WEEKOFYEAR

·函数语法:

WEEKOFYEAR(<d> date|timestamp|string)

·支持引擎:SparkSQL、Presto。

·使用说明:返回给定日期“d”是一年中的第几周。

·返回类型:integer。

·示例:

> SELECT weekofyear('2008-02-20'); 8

36、YEAR

·函数语法:

YEAR(<d> date|timestamp|string)

·支持引擎:SparkSQL、Presto。

·使用说明:返回日期/时间戳“d”中的年份。

·返回类型:integer。

·示例:

> SELECT year('2016-07-30'); 2016

37、MAKE_DATE

·函数语法:

MAKE_DATE(<year> integer, <month> integer, <day> integer)

·支持引擎:SparkSQL、Presto。

·使用说明:从 year、month 和 day 字段创建日期。

·返回类型:date。

·示例:

> SELECT make_date(2013, 7, 15); 2013-07-15> SELECT make_date(2019, 7, NULL); NULL

38、MAKE_TIMESTAMP

·函数语法:

MAKE_TIMESTAMP(<year> integer, <month> integer, <day> integer, <hour> integer, <min> integer, <sec> integer|double|decimal[, <timezone> string])

·支持引擎:SparkSQL、Presto。

·使用说明:根据给定字段创建时间戳。

·返回类型:timestamp。

·示例:

> SELECT make_timestamp(2014, 12, 28, 6, 30, 45.887); 2014-12-28 06:30:45.887> SELECT make_timestamp(2014, 12, 28, 6, 30, 45.887, 'CET'); 2014-12-27 21:30:45.887> SELECT make_timestamp(2019, 6, 30, 23, 59, 60); 2019-07-01 00:00:00> SELECT make_timestamp(2019, 6, 30, 23, 59, 1); 2019-06-30 23:59:01> SELECT make_timestamp(null, 7, 22, 15, 30, 0); NULL

39、DATE_PART

·函数语法:

DATE_PART(<field> string, <source> date|timestamp)

·支持引擎:SparkSQL、Presto。

·使用说明:提取日期/时间戳的一部分。

·返回类型:integer|double。

·示例:

> SELECT date_part('YEAR', TIMESTAMP '2019-08-12 01:00:00.123456'); 2019> SELECT date_part('week', timestamp '2019-08-12 01:00:00.123456'); 33> SELECT date_part('doy', DATE'2019-08-12'); 224> SELECT date_part('SECONDS', timestamp'2019-10-01 00:00:01.000001'); 1.000001

40、DATE_FROM_UNIX_DATE

·函数语法:

DATE_FROM_UNIX_DATE(<unix_timestamp> integer)

·支持引擎:SparkSQL、Presto。

·使用说明:根据自1970-01-01以来的天数创建日期。

·返回类型:date。

·示例:

> SELECT date_from_unix_date(1); 1970-01-02

41、UNIX_DATE

·函数语法:

UNIX_DATE(<d> date)

·支持引擎:SparkSQL、Presto。

·使用说明:返回自1970-01-01以来的天数。

·返回类型:integer。

·示例:

> SELECT unix_date(DATE("1970-01-02")); 1

42、TIMESTAMP_SECONDS

·函数语法:

TIMESTAMP_SECONDS(<sec> bigint|double|decimal)

·支持引擎:SparkSQL、Presto。

·使用说明:从 UTC 纪元以来的秒数创建时间戳。

·返回类型:timestamp。

·示例:

> SELECT timestamp_seconds(1230219000); 2008-12-25 07:30:00> SELECT timestamp_seconds(1230219000.123); 2008-12-25 07:30:00.123

43、TIMESTAMP_MILLIS

·函数语法:

TIMESTAMP_MILLIS(<milli> bigint|double|decimal)

·支持引擎:SparkSQL、Presto。

·使用说明:从 UTC 纪元以来的毫秒数创建时间戳。

·返回类型:timestamp。

·示例:

> SELECT timestamp_millis(1230219000123); 2008-12-25 07:30:00.123

44、TIMESTAMP_MICROS

·函数语法:

TIMESTAMP_MICROS(<micro> bigint)

·支持引擎:SparkSQL、Presto。

·使用说明:从 UTC 纪元以来的毫秒数创建时间戳。

·返回类型:timestamp。

·示例:

> SELECT timestamp_micros(1230219000123123); 2008-12-25 07:30:00.123123

45、UNIX_SECONDS

·函数语法:

UNIX_SECONDS(<ts> timestamp)

·支持引擎:SparkSQL、Presto。

·使用说明:返回自1970-01-01 00:00:00 UTC以来的秒数。

·返回类型:bigint。

·示例:

> SELECT unix_seconds(TIMESTAMP('1970-01-01 00:00:01Z')); 1

46、UNIX_MILLIS

·函数语法:

UNIX_MILLIS(<ts> timestamp)

·支持引擎:SparkSQL、Presto。

·使用说明:返回自1970-01-01 00:00:00 UTC 以来的毫秒数。

·返回类型:bigint。

·示例:

> SELECT unix_millis(TIMESTAMP('1970-01-01 00:00:01Z')); 1000

47、UNIX_MICROS

·函数语法:

UNIX_MICROS(<ts> timestamp)

·支持引擎:SparkSQL。

·使用说明:返回自1970-01-01 00:00:00 UTC 以来的微秒数。

·返回类型:bigint。

·示例:

> SELECT unix_micros(timestamp '1970 00:00:00.001') 1000

48、DATEADD/TIMESTAMP_ADD

·函数语法:

TIMESTAMP_ADD(<date|timestamp> dt, <int> delta, <string> pattern)TIMESTAMP_ADD(<date|timestamp> dt, <int> delta, <string> pattern)

·支持引擎:SparkSQL。

·引擎版本要求:需在2023年12月07日及以后购买的引擎、或升级到最新引擎。

·使用说明:在指定的日期或时间上,根据指定的单位和偏移量计算最终的时间。

·dt:输入的日期或时间格式。如果为null则返回为null。

·delta:必填,int类型。如果为null则返回null。

·pattern:必填,string类型,单位。pattern 可以支持:

·年(标准"y", 可兼容"-year", "yyyy")

·月(标准"M", 可兼容"-month","-mon", "MM")

·日(标准"d",可兼容"-day","dd")

·小时(标准"H",可兼容"-hour", "hh", "HH", "h")

·分钟 (标准"m",可兼容"mi", "mm")

·秒(标准"s",可兼容"ss")

·微秒(标准"S",可兼容"SSS")

不允许输入其他的类型,否则会报错。

·返回类型:timestamp。

·示例:

> SELECT timestamp_add(date '2016-12-31', -1, 'M');2016-11-30T00:00:00.000+08:00> SELECT timestamp_add(timestamp '2016-12-31 00:12:00', 1, 'm');2016-12-31T00:13:00.000+08:00> SELECT timestamp_add(timestamp '2016-12-31 00:00:00', -1, 'm');2016-12-30T23:59:00.000+08:00

赞 (0)
上一篇 4天前
下一篇 4天前