日期/时间函数 - Amazon Timestream

要获得与亚马逊 Timestream 类似的功能 LiveAnalytics,可以考虑适用于 InfluxDB 的亚马逊 Timestream。适用于 InfluxDB 的 Amazon Timestream 提供简化的数据摄取和个位数毫秒级的查询响应时间,以实现实时分析。点击此处了解更多信息。

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

日期/时间函数

注意

的时间流 LiveAnalytics 不支持负时间值。任何导致负时间的操作均会导致错误。

timestream LiveAnalytics 使用 UTC 时区作为日期和时间。Timestream 支持以下日期和时间函数。

通用和转换

Timestream for LiveAnalytics 支持以下日期和时间的常规函数和转换函数。

函数 输出数据类型 说明

current_date

date

返回以 UTC 为单位的当前日期。未使用括号。

SELECT current_date

示例结果:2022-07-07

注意

这也是一个保留关键字。有关保留关键字的列表,请参阅 保留关键字

current_time

时间

返回以 UTC 为单位的当前时间。未使用括号。

SELECT current_time

示例结果:17:41:52.827000000

注意

这也是一个保留关键字。有关保留关键字的列表,请参阅 保留关键字

current_timestamp or now()

timestamp

返回以 UTC 为单位的当前时间戳。

SELECT current_timestamp

示例结果:2022-07-07 17:42:32.939000000

注意

这也是一个保留关键字。有关保留关键字的列表,请参阅 保留关键字

current_timezone()

varchar

该值将是“UTC”。

Timestream 使用 UTC 时区作为日期和时间标准。

SELECT current_timezone()

示例结果:UTC

date(varchar(x)), date(timestamp)

date

SELECT date(TIMESTAMP '2022-07-07 17:44:43.771000000')

示例结果:2022-07-07

last_day_of_month(timestamp), last_day_of_month(date)

date

SELECT last_day_of_month(TIMESTAMP '2022-07-07 17:44:43.771000000')

示例结果:2022-07-31

from_iso8601_timestamp(string)

timestamp

将 ISO 8601 时间戳解析为内部时间戳格式。

SELECT from_iso8601_timestamp('2022-06-17T08:04:05.000000000+05:00')

示例结果:2022-06-17 03:04:05.000000000

from_iso8601_date(string)

date

将 ISO 8601 日期字符串解析为指定日期 UTC 00:00:00 的内部时间戳格式。

SELECT from_iso8601_date('2022-07-17')

示例结果:2022-07-17

to_iso8601(timestamp), to_iso8601(date)

varchar

返回输入的 ISO 8601 格式字符串。

SELECT to_iso8601(from_iso8601_date('2022-06-17'))

示例结果:2022-06-17

from_milliseconds(bigint)

timestamp

SELECT from_milliseconds(1)

示例结果:1970-01-01 00:00:00.001000000

from_nanoseconds(bigint)

timestamp

select from_nanoseconds(300000001)

示例结果:1970-01-01 00:00:00.300000001

from_unixtime(double)

timestamp

返回与给定 unixtime 相对应的时间戳。

SELECT from_unixtime(1)

示例结果:1970-01-01 00:00:01.000000000

localtime

时间

返回以 UTC 为单位的当前时间。未使用括号。

SELECT localtime

示例结果:17:58:22.654000000

注意

这也是一个保留关键字。有关保留关键字的列表,请参阅 保留关键字

localtimestamp

timestamp

返回以 UTC 为单位的当前时间戳。未使用括号。

SELECT localtimestamp

示例结果:2022-07-07 17:59:04.368000000

注意

这也是一个保留关键字。有关保留关键字的列表,请参阅 保留关键字

to_milliseconds(interval day to second), to_milliseconds(timestamp)

bigint

SELECT to_milliseconds(INTERVAL '2' DAY + INTERVAL '3' HOUR)

示例结果:183600000

SELECT to_milliseconds(TIMESTAMP '2022-06-17 17:44:43.771000000')

示例结果:1655487883771

to_nanoseconds(interval day to second), to_nanoseconds(timestamp)

bigint

SELECT to_nanoseconds(INTERVAL '2' DAY + INTERVAL '3' HOUR)

示例结果:183600000000000

SELECT to_nanoseconds(TIMESTAMP '2022-06-17 17:44:43.771000678')

示例结果:1655487883771000678

to_unixtime(timestamp)

double

返回给定时间戳的 unixtime。

SELECT to_unixtime('2022-06-17 17:44:43.771000000')

示例结果:1.6554878837710001E9

date_trunc(unit, timestamp)

timestamp

返回截断为指定单位的时间戳,单位为 [秒、分钟、小时、日、周、月、季度、年] 其中之一。

SELECT date_trunc('minute', TIMESTAMP '2022-06-17 17:44:43.771000000')

示例结果:2022-06-17 17:44:00.000000000

间隔和持续时间

Timestream for LiveAnalytics 支持以下日期和时间间隔和持续时间函数。

函数 输出数据类型 说明

date_add(unit, bigint, date), date_add(unit, bigint, time), date_add(varchar(x), bigint, timestamp)

timestamp

添加 bigint,单位为 [秒、分钟、小时、日、周、月、季度、年] 其中之一。

SELECT date_add('hour', 9, TIMESTAMP '2022-06-17 00:00:00')

示例结果:2022-06-17 09:00:00.000000000

date_diff(unit, date, date) , date_diff(unit, time, time) , date_diff(unit, timestamp, timestamp)

bigint

返回差值,其中单位为 [秒、分钟、小时、日、周、月、季度、年] 之一。

SELECT date_diff('day', DATE '2020-03-01', DATE '2020-03-02')

示例结果:1

parse_duration(string)

interval

解析输入字符串,以返回等效的 interval

SELECT parse_duration('42.8ms')

示例结果:0 00:00:00.042800000

SELECT typeof(parse_duration('42.8ms'))

示例结果:interval day to second

bin(timestamp, interval)

timestamp

将参数 timestamp 的整数部分向下取整,取其最接近的参数 interval 的整数倍数。

此返回值的含义可能并不明显。该值通过整数运算计算得出:首先将时间戳整数除以间隔整数,然后将结果乘以间隔整数。

请注意,时间戳将 UTC 时间点指定为自 POSIX epoch(1970 年 1 月 1 日)起经过的若干个零点几秒,因此其返回值很少与日历时间单位完全对应。例如,如果指定 30 天间隔,则自 epoch 以来所有天数都将划分为 30 天增量,并返回最近 30 天增量的起始点,该起始点与日历月份无关。

下面是一些示例:

bin(TIMESTAMP '2022-06-17 10:15:20', 5m) ==> 2022-06-17 10:15:00.000000000 bin(TIMESTAMP '2022-06-17 10:15:20', 1d) ==> 2022-06-17 00:00:00.000000000 bin(TIMESTAMP '2022-06-17 10:15:20', 10day) ==> 2022-06-17 00:00:00.000000000 bin(TIMESTAMP '2022-06-17 10:15:20', 30day) ==> 2022-05-28 00:00:00.000000000

ago(interval)

timestamp

返回与 current_timestamp interval 对应的值。

SELECT ago(1d)

示例结果:2022-07-06 21:08:53.245000000

间隔字面值,例如 1h、1d 和 30m

interval

间隔字面值是 parse_duration(string) 的简易形式。例如,1dparse_duration('1d') 相同。这允许在任何使用间隔的地方使用字面值。例如,ago(1d)bin(<timestamp>, 1m)

一些间隔字面值可作为 parse_duration 的简写形式。例如,parse_duration('1day')1dayparse_duration('1d')1d 均返回 1 00:00:00.000000000,其中类型为 interval day to second。允许给定格式 parse_duration 中存在空格。例如,parse_duration('1day') 也返回 00:00:00.000000000。但 1 day 不是间隔字面值。

interval day to second 相关的单位包括:ns(纳秒)、us(微秒)、ms(毫秒)、s(秒)、m(分钟)、h(小时)、d(天)。

还有 interval year to month。与间隔年到月相关的单位包括:y(年)、月。例如,SELECT 1year 返回 1-0SELECT 12month 也返回 1-0SELECT 8month 返回 0-8

尽管 quarter 的单位也可用于某些函数,例如 date_truncdate_add,但 quarter 不能作为间隔字面值使用。

格式化与解析

Timestream for LiveAnalytics 支持以下日期和时间的格式化和解析函数。

函数 输出数据类型 说明

date_format(timestamp, varchar(x))

varchar

有关此函数使用的格式说明符的更多信息,请参见 # https://trino.io/docs/current/functions/datetime.html mysql-date-functions

SELECT date_format(TIMESTAMP '2019-10-20 10:20:20', '%Y-%m-%d %H:%i:%s')

示例结果:2019-10-20 10:20:20

date_parse(varchar(x), varchar(y))

timestamp

有关此函数使用的格式说明符的更多信息,请参见 # https://trino.io/docs/current/functions/datetime.html mysql-date-functions

SELECT date_parse('2019-10-20 10:20:20', '%Y-%m-%d %H:%i:%s')

示例结果:2019-10-20 10:20:20.000000000

format_datetime(timestamp, varchar(x))

varchar

有关此函数使用的格式字符串的更多信息,请参阅 http://joda-time.sourceforge。 net/apidocs/org/joda/time/format/DateTimeFormat.html

SELECT format_datetime(parse_datetime('1968-01-13 12', 'yyyy-MM-dd HH'), 'yyyy-MM-dd HH')

示例结果:1968-01-13 12

parse_datetime(varchar(x), varchar(y))

timestamp

有关此函数使用的格式字符串的更多信息,请参阅 http://joda-time.sourceforge。 net/apidocs/org/joda/time/format/DateTimeFormat.html

SELECT parse_datetime('2019-12-29 10:10 PST', 'uuuu-LL-dd HH:mm z')

示例结果:2019-12-29 18:10:00.000000000

提取

Timestream for LiveAnalytics 支持以下日期和时间提取函数。提取函数是其余便捷函数的基础。

函数 输出数据类型 说明

extract

bigint

从时间戳中提取字段,字段为 [YEAR、QUARTER、MONTH、WEEK、DAY、DAY_OF_MONTH、DAY_OF_WEEK、DOW、DAY_OF_YEAR、DOY、YEAR_OF_WEEK、YOW、HOUR、MINUTE、SECOND] 其中之一。

SELECT extract(YEAR FROM '2019-10-12 23:10:34.000000000')

示例结果:2019

day(timestamp), day(date), day(interval day to second)

bigint

SELECT day('2019-10-12 23:10:34.000000000')

示例结果:12

day_of_month(timestamp), day_of_month(date), day_of_month(interval day to second)

bigint

SELECT day_of_month('2019-10-12 23:10:34.000000000')

示例结果:12

day_of_week(timestamp), day_of_week(date)

bigint

SELECT day_of_week('2019-10-12 23:10:34.000000000')

示例结果:6

day_of_year(timestamp), day_of_year(date)

bigint

SELECT day_of_year('2019-10-12 23:10:34.000000000')

示例结果:285

dow(timestamp), dow(date)

bigint

day_of_week 的别名

doy(timestamp), doy(date)

bigint

day_of_year 的别名

hour(timestamp), hour(time), hour(interval day to second)

bigint

SELECT hour('2019-10-12 23:10:34.000000000')

示例结果:23

millisecond(timestamp), millisecond(time), millisecond(interval day to second)

bigint

SELECT millisecond('2019-10-12 23:10:34.000000000')

示例结果:0

minute(timestamp), minute(time), minute(interval day to second)

bigint

SELECT minute('2019-10-12 23:10:34.000000000')

示例结果:10

month(timestamp), month(date), month(interval year to month)

bigint

SELECT month('2019-10-12 23:10:34.000000000')

示例结果:10

nanosecond(timestamp), nanosecond(time), nanosecond(interval day to second)

bigint

SELECT nanosecond(current_timestamp)

示例结果:162000000

quarter(timestamp), quarter(date)

bigint

SELECT quarter('2019-10-12 23:10:34.000000000')

示例结果:4

second(timestamp), second(time), second(interval day to second)

bigint

SELECT second('2019-10-12 23:10:34.000000000')

示例结果:34

week(timestamp), week(date)

bigint

SELECT week('2019-10-12 23:10:34.000000000')

示例结果:41

week_of_year(timestamp), week_of_year(date)

bigint

week 的别名

year(timestamp), year(date), year(interval year to month)

bigint

SELECT year('2019-10-12 23:10:34.000000000')

示例结果:2019

year_of_week(timestamp), year_of_week(date)

bigint

SELECT year_of_week('2019-10-12 23:10:34.000000000')

示例结果:2019

yow(timestamp), yow(date)

bigint

year_of_week 的别名