有奖捉虫:办公协同&微信生态&物联网文档专题 HOT

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(start date|timestamp|string, end 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

函数语法:
-- SparkSQL
TO_UTC_TIMESTAMP(<ts> date|timestamp|string, <timezone> string)

-- Presto
TO_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