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
支持引擎:SparkSQL、Presto。
使用说明:计算日期/时间戳 d 是这个月的第几天。
返回类型:integer。
示例:
> SELECT dayofmonth('2009-07-30');30
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
MONTH
函数语法:
MONTH(<d> date|timestamp|string)
支持引擎:SparkSQL、Presto。
使用说明:返回日期 d 的月份。
返回类型:integer。
示例:
> SELECT month('2016-07-30');7
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
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
NOW
函数语法:
NOW()
支持引擎:SparkSQL、Presto。
使用说明:返回当前时间戳。
返回类型:timestamp。
示例:
> SELECT now();2020-04-25 15:49:11.914
QUARTER
函数语法:
QUARTER(<d> date|timestamp|string)
支持引擎:SparkSQL、Presto。
使用说明:返回 d 所在季度。
返回类型:integer。
示例:
> SELECT quarter('2016-08-31');3
SECOND
函数语法:
SECOND(<ts> timestamp|string)
支持引擎:SparkSQL、Presto。
使用说明:返回当前时间戳的秒数。
返回类型:integer。
示例:
> SELECT second('2009-07-30 12:58:59');59
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
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
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
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
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
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
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
DAYOFWEEK
函数语法:
DAYOFWEEK(<d> date|timestamp|string)
支持引擎:parkSQL、Presto。
使用说明:回日期/时间戳“d”是星期几。
返回类型:nteger。
示例:
> SELECT dayofweek('2009-07-30');5
WEEKDAY
函数语法:
WEEKDAY(<d> date|timestamp|string)
支持引擎:SparkSQL、Presto。
使用说明:返回日期/时间戳“d”是星期几。
返回类型:integer。
示例:
> SELECT weekday('2009-07-30');3
WEEKOFYEAR
函数语法:
WEEKOFYEAR(<d> date|timestamp|string)
支持引擎:SparkSQL、Presto。
使用说明:返回给定日期“d”是一年中的第几周。
返回类型:integer。
示例:
> SELECT weekofyear('2008-02-20');8
YEAR
函数语法:
YEAR(<d> date|timestamp|string)
支持引擎:SparkSQL、Presto。
使用说明:返回日期/时间戳“d”中的年份。
返回类型:integer。
示例:
> SELECT year('2016-07-30');2016
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
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
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
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
UNIX_DATE
函数语法:
UNIX_DATE(<d> date)
支持引擎:SparkSQL、Presto。
使用说明:返回自1970-01-01以来的天数。
返回类型:integer。
示例:
> SELECT unix_date(DATE("1970-01-02"));1
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
TIMESTAMP_MILLIS
函数语法:
TIMESTAMP_MILLIS(<milli> bigint|double|decimal)
支持引擎:SparkSQL、Presto。
使用说明:从 UTC 纪元以来的毫秒数创建时间戳。
返回类型:timestamp。
示例:
> SELECT timestamp_millis(1230219000123);2008-12-25 07:30:00.123
TIMESTAMP_MICROS
函数语法:
TIMESTAMP_MICROS(<micro> bigint)
支持引擎:SparkSQL、Presto。
使用说明:从 UTC 纪元以来的毫秒数创建时间戳。
返回类型:timestamp。
示例:
> SELECT timestamp_micros(1230219000123123);2008-12-25 07:30:00.123123
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
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
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
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")
不允许输入其他的类型,否则会报错。
注意:
当 delta 的单位是月时,如果 delta 的月部分在增加 delta 值之后不造成 Day 溢出,则保持 Day 值不变,否则将 Day 值设置为结果月份的最后1天。
注意输出的时间默认是时区的。
月M和分钟m的单位区别;兼容了0-12小时制h和0-24小时制H,但是推荐使用H。
返回类型: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