更新时间:2022-12-07 GMT+08:00

时间函数

Flink SQL所支持的时间函数如表1所示。

函数说明

表1 时间函数

函数

返回值

描述

DATE string

DATE

将日期字符串以“yyyy-MM-dd”的形式解析为SQL日期。

TIME string

TIME

将时间字符串以HH:mm:ss”形式解析为SQL时间。

TIMESTAMP string

TIMESTAMP

将时间字符串转换为时间戳,时间字符串格式为:“yyyy-MM-dd HH:mm:ss.fff”

INTERVAL string range

INTERVAL

interval表示时间间隔,有两种类型,一种为“yyyy-MM,即保存年份和月份,精度到月份,它的Range可以为YEAR或者YEAR To Month;一种为天 时间(“dd HH:mm:sss.fff'”),用来保存天数、小时、分钟、秒和毫秒, 精度最低到毫秒, 他的range可以为DAY TO HOUR,DAY TO MINUTE,DAY TO SECOND或DAY TO milliseconds,比如range为DAY TO SECOND就表示天数、小时、分钟、秒的位置都有效,精度到秒,DAY TO MINUTE就表示精度到分钟。

例如:

INTERVAL '10 00:00:00.004' DAY TO milliseconds表示间隔10天4毫秒。

INTERVAL '10' DAY表示间隔10天, INTERVAL '2-10' YEAR TO MONTH表示间隔2年10个月。

CURRENT_DATE

DATE

以UTC时区返回当前SQL日期。

CURRENT_TIME

TIME

以UTC时区返回当前SQL时间。

CURRENT_TIMESTAMP

TIMESTAMP

以UTC时区返回当前SQL时间戳。

LOCALTIME

TIME

返回当前时区的当前SQL时间。

LOCALTIMESTAMP

TIMESTAMP

返回当前时区的当前SQL时间戳。

EXTRACT(timeintervalunit FROM temporal)

INT

提取时间点的一部分或者时间间隔。以int类型返回该部分。

例如:提取日期“2006-06-05”中的日为5,则可以使用:EXTRACT(DAY FROM DATE "2006-06-05")

FLOOR(timepoint TO timeintervalunit)

TIME

向下对齐时间。

例如:FLOOR(TIME '12:44:31' TO MINUTE)按分钟对齐到12:44:00。

CEIL(timepoint TO timeintervalunit)

TIME

向上对齐时间。

例如:CEIL(TIME '12:44:31' TO MINUTE)按分钟对齐到12:45:00。

QUARTER(date)

INT

从SQL日期返回一年的四分之一。

(timepoint, temporal) OVERLAPS (timepoint, temporal)

BOOLEAN

确定两个时间间隔是否重叠。时间点和时间被转换成在两个时间点(开始,结束)定义的范围之内,该计算函数是leftEnd >= rightStart && rightEnd >= leftStart。当左边结束时间点大于等于右边开始时间点,且右边结束时间点大于等于左边开始时间点,则函数返回true值,否则返回false。

例如:

  • 左边的结束时间点是“3:55:00”(2:55:00+1:00:00)大于右边的开始点是“3:30:00”;且右边的结束时间点是“5:30:00”(3:30:00+2:00:00)大于左边开始时间点“2:55:00”,则返回值为true。

    (TIME '2:55:00', INTERVAL '1' HOUR) OVERLAPS (TIME '3:30:00', INTERVAL '2' HOUR) 返回值是true。

  • 左边的结束时间点是“10:00:00”小于右边的开始点是“10:15:00”;且右边的结束时间点是“13:15:00”(10:15:00+3:00:00)大于左边开始时间点“9:00:00”,则返回值为false。

    (TIME '9:00:00', TIME '10:00:00') OVERLAPS (TIME '10:15:00', INTERVAL '3' HOUR) 返回值是false。

TO_TIMESTAMP(long expr)

TIMESTAMP

将时间戳转换为时间。

该函数入参数据类型仅支持BIGINT,不支持VARCHAR,STRING等其他数据类型。

例如,TO_TIMESTAMP(1628765159000)转换后值为:2021-08-12 18:45:59。

UNIX_TIMESTAMP

BIGINT

返回指定参数的时间戳,时间戳类型为BIGINT类型,单位为“秒”

支持如下几种使用方法:

  • UNIX_TIMESTAMP():没有参数时,返回当前时间的时间戳。
  • UNIX_TIMESTAMP(STRING datestr):包含一个参数时,返回参数所表示的时间戳,datestr格式必须为yyyy-MM-dd HH:mm:ss。
  • UNIX_TIMESTAMP(STRING datestr, STRING format):包含两个参数时,第二个参数可以指定datestr的格式,返回第一个参数所表示的时间戳。

UNIX_TIMESTAMP_MS

BIGINT

返回指定参数的时间戳,时间戳类型为BIGINT类型,单位为“毫秒”

支持如下几种使用方法:

  • UNIX_TIMESTAMP_MS():没有参数时,返回当前时间的时间戳。
  • UNIX_TIMESTAMP_MS(STRING datestr):包含一个参数时,返回参数所表示的时间戳,datestr格式必须为yyyy-MM-dd HH:mm:ss.SSS。
  • UNIX_TIMESTAMP_MS(STRING datestr, STRING format):包含两个参数时,第二个参数可以指定datestr的格式,返回第一个参数所表示的时间戳。

注意事项

无。

示例

insert into temp SELECT Date '2015-10-11'  FROM  OrderA;//返回日期
insert into temp1 SELECT Time '12:14:50'  FROM  OrderA;//返回时间
insert into temp2 SELECT Timestamp '2015-10-11 12:14:50'  FROM  OrderA;//返回时间戳