

要获得与亚马逊 Timestream 类似的功能 LiveAnalytics，可以考虑适用于 InfluxDB 的亚马逊 Timestream。适用于 InfluxDB 的 Amazon Timestream 提供简化的数据摄取和个位数毫秒级的查询响应时间，以实现实时分析。点击[此处](https://docs.aws.amazon.com//timestream/latest/developerguide/timestream-for-influxdb.html)了解更多信息。

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

# 日期/时间函数
<a name="date-time-functions"></a>

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

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

**Topics**
+ [通用和转换](#date-time-functions-general)
+ [间隔和持续时间](#date-time-functions-interval-duration)
+ [格式化与解析](#date-time-functions-formatting-parsing)
+ [提取](#date-time-functions-extraction)

## 通用和转换
<a name="date-time-functions-general"></a>

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


| 函数 | 输出数据类型 | 说明 | 
| --- | --- | --- | 
|  current\$1date  |  date  |  返回以 UTC 为单位的当前日期。未使用括号。 <pre>SELECT current_date</pre> 示例结果：`2022-07-07`  这也是一个保留关键字。有关保留关键字的列表，请参阅[保留关键字](ts-limits.md#limits.reserved)。   | 
|  current\$1time  |  时间  |  返回以 UTC 为单位的当前时间。未使用括号。 <pre>SELECT current_time</pre> 示例结果：`17:41:52.827000000`  这也是一个保留关键字。有关保留关键字的列表，请参阅[保留关键字](ts-limits.md#limits.reserved)。   | 
|  current\$1timestamp or now()  |  timestamp  |  返回以 UTC 为单位的当前时间戳。 <pre>SELECT current_timestamp</pre> 示例结果：`2022-07-07 17:42:32.939000000`  这也是一个保留关键字。有关保留关键字的列表，请参阅[保留关键字](ts-limits.md#limits.reserved)。   | 
|  current\$1timezone()  |  varchar 该值将是“UTC”。  |  Timestream 使用 UTC 时区作为日期和时间标准。 <pre>SELECT current_timezone()</pre> 示例结果：`UTC`  | 
|  date(varchar(x)), date(timestamp)  |  date  |  <pre>SELECT date(TIMESTAMP '2022-07-07 17:44:43.771000000')</pre> 示例结果：`2022-07-07`  | 
|  last\$1day\$1of\$1month(timestamp), last\$1day\$1of\$1month(date)  |  date  |  <pre>SELECT last_day_of_month(TIMESTAMP '2022-07-07 17:44:43.771000000')</pre> 示例结果：`2022-07-31`  | 
|  from\$1iso8601\$1timestamp(string)  |  timestamp  |  将 ISO 8601 时间戳解析为内部时间戳格式。 <pre>SELECT from_iso8601_timestamp('2022-06-17T08:04:05.000000000+05:00')</pre> 示例结果：`2022-06-17 03:04:05.000000000`  | 
|  from\$1iso8601\$1date(string)  |  date  |  将 ISO 8601 日期字符串解析为指定日期 UTC 00:00:00 的内部时间戳格式。 <pre>SELECT from_iso8601_date('2022-07-17')</pre> 示例结果：`2022-07-17`  | 
|  to\$1iso8601(timestamp), to\$1iso8601(date)  |  varchar  |  返回输入的 ISO 8601 格式字符串。 <pre>SELECT to_iso8601(from_iso8601_date('2022-06-17'))</pre> 示例结果：`2022-06-17`  | 
|  from\$1milliseconds(bigint)  |  timestamp  |  <pre>SELECT from_milliseconds(1)</pre> 示例结果：`1970-01-01 00:00:00.001000000`  | 
|  from\$1nanoseconds(bigint)  |  timestamp  |  <pre>select from_nanoseconds(300000001)</pre> 示例结果：`1970-01-01 00:00:00.300000001`  | 
|  from\$1unixtime(double)  |  timestamp  |  返回与给定 unixtime 相对应的时间戳。 <pre>SELECT from_unixtime(1)</pre> 示例结果：`1970-01-01 00:00:01.000000000`  | 
|  localtime  |  时间  |  返回以 UTC 为单位的当前时间。未使用括号。 <pre>SELECT localtime</pre> 示例结果：`17:58:22.654000000`  这也是一个保留关键字。有关保留关键字的列表，请参阅[保留关键字](ts-limits.md#limits.reserved)。   | 
|  localtimestamp  |  timestamp  |  返回以 UTC 为单位的当前时间戳。未使用括号。 <pre>SELECT localtimestamp</pre> 示例结果：`2022-07-07 17:59:04.368000000`  这也是一个保留关键字。有关保留关键字的列表，请参阅[保留关键字](ts-limits.md#limits.reserved)。   | 
|  to\$1milliseconds(interval day to second), to\$1milliseconds(timestamp)  |  bigint  |  <pre>SELECT to_milliseconds(INTERVAL '2' DAY + INTERVAL '3' HOUR)</pre> 示例结果：`183600000` <pre>SELECT to_milliseconds(TIMESTAMP '2022-06-17 17:44:43.771000000')</pre> 示例结果：`1655487883771`  | 
|  to\$1nanoseconds(interval day to second), to\$1nanoseconds(timestamp)  |  bigint  |  <pre>SELECT to_nanoseconds(INTERVAL '2' DAY + INTERVAL '3' HOUR)</pre> 示例结果：`183600000000000` <pre>SELECT to_nanoseconds(TIMESTAMP '2022-06-17 17:44:43.771000678')</pre> 示例结果：`1655487883771000678`  | 
|  to\$1unixtime(timestamp)  |  double  |  返回给定时间戳的 unixtime。 <pre>SELECT to_unixtime('2022-06-17 17:44:43.771000000')</pre> 示例结果：`1.6554878837710001E9`  | 
|  date\$1trunc(unit, timestamp)  |  timestamp  |  返回截断为指定单位的时间戳，单位为 [秒、分钟、小时、日、周、月、季度、年] 其中之一。 <pre>SELECT date_trunc('minute', TIMESTAMP '2022-06-17 17:44:43.771000000')</pre> 示例结果：`2022-06-17 17:44:00.000000000`  | 

## 间隔和持续时间
<a name="date-time-functions-interval-duration"></a>

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


| 函数 | 输出数据类型 | 说明 | 
| --- | --- | --- | 
|  date\$1add(unit, bigint, date), date\$1add(unit, bigint, time), date\$1add(varchar(x), bigint, timestamp)  |  timestamp  |  添加 bigint，单位为 [秒、分钟、小时、日、周、月、季度、年] 其中之一。 <pre>SELECT date_add('hour', 9, TIMESTAMP '2022-06-17 00:00:00')</pre> 示例结果：`2022-06-17 09:00:00.000000000`  | 
|  date\$1diff(unit, date, date) , date\$1diff(unit, time, time) , date\$1diff(unit, timestamp, timestamp)  |  bigint  |  返回差值，其中单位为 [秒、分钟、小时、日、周、月、季度、年] 之一。 <pre>SELECT date_diff('day', DATE '2020-03-01', DATE '2020-03-02')</pre> 示例结果：`1`  | 
|  parse\$1duration(string)  |  interval  |  解析输入字符串，以返回等效的 `interval`。 <pre>SELECT parse_duration('42.8ms')</pre> 示例结果：`0 00:00:00.042800000` <pre>SELECT typeof(parse_duration('42.8ms'))</pre> 示例结果：`interval day to second`  | 
| bin(timestamp, interval) | timestamp |  将参数 `timestamp` 的整数部分向下取整，取其最接近的参数 `interval` 的整数倍数。 此返回值的含义可能并不明显。该值通过整数运算计算得出：首先将时间戳整数除以间隔整数，然后将结果乘以间隔整数。 请注意，时间戳将 UTC 时间点指定为自 POSIX epoch（1970 年 1 月 1 日）起经过的若干个零点几秒，因此其返回值很少与日历时间单位完全对应。例如，如果指定 30 天间隔，则自 epoch 以来所有天数都将划分为 30 天增量，并返回最近 30 天增量的起始点，该起始点与日历月份无关。 下面是一些示例： <pre>bin(TIMESTAMP '2022-06-17 10:15:20', 5m)     ==> 2022-06-17 10:15:00.000000000<br />bin(TIMESTAMP '2022-06-17 10:15:20', 1d)     ==> 2022-06-17 00:00:00.000000000<br />bin(TIMESTAMP '2022-06-17 10:15:20', 10day)  ==> 2022-06-17 00:00:00.000000000<br />bin(TIMESTAMP '2022-06-17 10:15:20', 30day)  ==> 2022-05-28 00:00:00.000000000</pre>  | 
|  ago(interval)  |  timestamp  |  返回与 current\$1timestamp `interval` 对应的值。 <pre>SELECT ago(1d)</pre> 示例结果：`2022-07-06 21:08:53.245000000`  | 
|  间隔字面值，例如 1h、1d 和 30m  |  interval  |  间隔字面值是 parse\$1duration(string) 的简易形式。例如，`1d` 与 `parse_duration('1d')` 相同。这允许在任何使用间隔的地方使用字面值。例如，`ago(1d)` 和 `bin(<timestamp>, 1m)`。  | 

一些间隔字面值可作为 parse\$1duration 的简写形式。例如，`parse_duration('1day')`、`1day`、`parse_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-0`。`SELECT 12month` 也返回 `1-0`。`SELECT 8month` 返回 `0-8`。

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

## 格式化与解析
<a name="date-time-functions-formatting-parsing"></a>

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


| 函数 | 输出数据类型 | 说明 | 
| --- | --- | --- | 
|  date\$1format(timestamp, varchar(x))  |  varchar  |  [有关此函数使用的格式说明符的更多信息，请参见 \$1 https://trino.io/docs/current/functions/datetime.html mysql-date-functions](https://trino.io/docs/current/functions/datetime.html#mysql-date-functions) <pre>SELECT date_format(TIMESTAMP '2019-10-20 10:20:20', '%Y-%m-%d %H:%i:%s')</pre> 示例结果：`2019-10-20 10:20:20`  | 
|  date\$1parse(varchar(x), varchar(y))  |  timestamp  |  [有关此函数使用的格式说明符的更多信息，请参见 \$1 https://trino.io/docs/current/functions/datetime.html mysql-date-functions](https://trino.io/docs/current/functions/datetime.html#mysql-date-functions) <pre>SELECT date_parse('2019-10-20 10:20:20', '%Y-%m-%d %H:%i:%s')</pre> 示例结果：`2019-10-20 10:20:20.000000000`  | 
|  format\$1datetime(timestamp, varchar(x))  |  varchar  |  有关此函数使用的格式字符串的更多信息，请参阅 [http://joda-time.sourceforge。 net/apidocs/org/joda/time/format/DateTimeFormat.html](http://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormat.html) <pre>SELECT format_datetime(parse_datetime('1968-01-13 12', 'yyyy-MM-dd HH'), 'yyyy-MM-dd HH')</pre> 示例结果：`1968-01-13 12`  | 
|  parse\$1datetime(varchar(x), varchar(y))  |  timestamp  |  有关此函数使用的格式字符串的更多信息，请参阅 [http://joda-time.sourceforge。 net/apidocs/org/joda/time/format/DateTimeFormat.html](http://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormat.html) <pre>SELECT parse_datetime('2019-12-29 10:10 PST', 'uuuu-LL-dd HH:mm z')</pre> 示例结果：`2019-12-29 18:10:00.000000000`  | 

## 提取
<a name="date-time-functions-extraction"></a>

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


| 函数 | 输出数据类型 | 说明 | 
| --- | --- | --- | 
|  extract  |  bigint  |  从时间戳中提取字段，字段为 [YEAR、QUARTER、MONTH、WEEK、DAY、DAY\$1OF\$1MONTH、DAY\$1OF\$1WEEK、DOW、DAY\$1OF\$1YEAR、DOY、YEAR\$1OF\$1WEEK、YOW、HOUR、MINUTE、SECOND] 其中之一。 <pre>SELECT extract(YEAR FROM '2019-10-12 23:10:34.000000000')</pre> 示例结果：`2019`  | 
|  day(timestamp), day(date), day(interval day to second)  |  bigint  |  <pre>SELECT day('2019-10-12 23:10:34.000000000')</pre> 示例结果：`12`  | 
|  day\$1of\$1month(timestamp), day\$1of\$1month(date), day\$1of\$1month(interval day to second)  |  bigint  |  <pre>SELECT day_of_month('2019-10-12 23:10:34.000000000')</pre> 示例结果：`12`  | 
|  day\$1of\$1week(timestamp), day\$1of\$1week(date)  |  bigint  |  <pre>SELECT day_of_week('2019-10-12 23:10:34.000000000')</pre> 示例结果：`6`  | 
|  day\$1of\$1year(timestamp), day\$1of\$1year(date)  |  bigint  |  <pre>SELECT day_of_year('2019-10-12 23:10:34.000000000')</pre> 示例结果：`285`  | 
|  dow(timestamp), dow(date)  |  bigint  |  day\$1of\$1week 的别名  | 
|  doy(timestamp), doy(date)  |  bigint  |  day\$1of\$1year 的别名  | 
|  hour(timestamp), hour(time), hour(interval day to second)  |  bigint  |  <pre>SELECT hour('2019-10-12 23:10:34.000000000')</pre> 示例结果：`23`  | 
|  millisecond(timestamp), millisecond(time), millisecond(interval day to second)  |  bigint  |  <pre>SELECT millisecond('2019-10-12 23:10:34.000000000')</pre> 示例结果：`0`  | 
|  minute(timestamp), minute(time), minute(interval day to second)  |  bigint  |  <pre>SELECT minute('2019-10-12 23:10:34.000000000')</pre> 示例结果：`10`  | 
|  month(timestamp), month(date), month(interval year to month)  |  bigint  |  <pre>SELECT month('2019-10-12 23:10:34.000000000')</pre> 示例结果：`10`  | 
|  nanosecond(timestamp), nanosecond(time), nanosecond(interval day to second)  |  bigint  |  <pre>SELECT nanosecond(current_timestamp)</pre> 示例结果：`162000000`  | 
|  quarter(timestamp), quarter(date)  |  bigint  |  <pre>SELECT quarter('2019-10-12 23:10:34.000000000')</pre> 示例结果：`4`  | 
|  second(timestamp), second(time), second(interval day to second)  |  bigint  |  <pre>SELECT second('2019-10-12 23:10:34.000000000')</pre> 示例结果：`34`  | 
|  week(timestamp), week(date)  |  bigint  |  <pre>SELECT week('2019-10-12 23:10:34.000000000')</pre> 示例结果：`41`  | 
|  week\$1of\$1year(timestamp), week\$1of\$1year(date)  |  bigint  |  week 的别名  | 
|  year(timestamp), year(date), year(interval year to month)  |  bigint  |  <pre>SELECT year('2019-10-12 23:10:34.000000000')</pre> 示例结果：`2019`  | 
|  year\$1of\$1week(timestamp), year\$1of\$1week(date)  |  bigint  |  <pre>SELECT year_of_week('2019-10-12 23:10:34.000000000')</pre> 示例结果：`2019`  | 
|  yow(timestamp), yow(date)  |  bigint  |  year\$1of\$1week 的别名  | 