

要获得与亚马逊 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\_date | date | 返回以 UTC 为单位的当前日期。未使用括号。<pre>SELECT current_date</pre><br />示例结果：`2022-07-07` 这也是一个保留关键字。有关保留关键字的列表，请参阅[保留关键字](ts-limits.md#limits.reserved)。  | 
| current\_time | 时间 | 返回以 UTC 为单位的当前时间。未使用括号。<pre>SELECT current_time</pre><br />示例结果：`17:41:52.827000000` 这也是一个保留关键字。有关保留关键字的列表，请参阅[保留关键字](ts-limits.md#limits.reserved)。  | 
| current\_timestamp or now() | timestamp | 返回以 UTC 为单位的当前时间戳。<pre>SELECT current_timestamp</pre><br />示例结果：`2022-07-07 17:42:32.939000000` 这也是一个保留关键字。有关保留关键字的列表，请参阅[保留关键字](ts-limits.md#limits.reserved)。  | 
| current\_timezone() | varchar<br />该值将是“UTC”。 | Timestream 使用 UTC 时区作为日期和时间标准。<pre>SELECT current_timezone()</pre><br />示例结果：`UTC` | 
| date(varchar(x)), date(timestamp) | date | <pre>SELECT date(TIMESTAMP '2022-07-07 17:44:43.771000000')</pre>示例结果：`2022-07-07` | 
| last\_day\_of\_month(timestamp), last\_day\_of\_month(date) | date | <pre>SELECT last_day_of_month(TIMESTAMP '2022-07-07 17:44:43.771000000')</pre>示例结果：`2022-07-31` | 
| from\_iso8601\_timestamp(string) | timestamp | 将 ISO 8601 时间戳解析为内部时间戳格式。<pre>SELECT from_iso8601_timestamp('2022-06-17T08:04:05.000000000+05:00')</pre><br />示例结果：`2022-06-17 03:04:05.000000000` | 
| from\_iso8601\_date(string) | date | 将 ISO 8601 日期字符串解析为指定日期 UTC 00:00:00 的内部时间戳格式。<pre>SELECT from_iso8601_date('2022-07-17')</pre><br />示例结果：`2022-07-17` | 
| to\_iso8601(timestamp), to\_iso8601(date) | varchar | 返回输入的 ISO 8601 格式字符串。<pre>SELECT to_iso8601(from_iso8601_date('2022-06-17'))</pre><br />示例结果：`2022-06-17` | 
| from\_milliseconds(bigint) | timestamp | <pre>SELECT from_milliseconds(1)</pre>示例结果：`1970-01-01 00:00:00.001000000` | 
| from\_nanoseconds(bigint) | timestamp | <pre>select from_nanoseconds(300000001)</pre>示例结果：`1970-01-01 00:00:00.300000001` | 
| from\_unixtime(double) | timestamp | 返回与给定 unixtime 相对应的时间戳。<pre>SELECT from_unixtime(1)</pre><br />示例结果：`1970-01-01 00:00:01.000000000` | 
| localtime | 时间 | 返回以 UTC 为单位的当前时间。未使用括号。<pre>SELECT localtime</pre><br />示例结果：`17:58:22.654000000` 这也是一个保留关键字。有关保留关键字的列表，请参阅[保留关键字](ts-limits.md#limits.reserved)。  | 
| localtimestamp | timestamp | 返回以 UTC 为单位的当前时间戳。未使用括号。<pre>SELECT localtimestamp</pre><br />示例结果：`2022-07-07 17:59:04.368000000` 这也是一个保留关键字。有关保留关键字的列表，请参阅[保留关键字](ts-limits.md#limits.reserved)。  | 
| to\_milliseconds(interval day to second), to\_milliseconds(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><br />示例结果：`1655487883771` | 
| to\_nanoseconds(interval day to second), to\_nanoseconds(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><br />示例结果：`1655487883771000678` | 
| to\_unixtime(timestamp) | double | 返回给定时间戳的 unixtime。<pre>SELECT to_unixtime('2022-06-17 17:44:43.771000000')</pre><br />示例结果：`1.6554878837710001E9` | 
| date\_trunc(unit, timestamp) | timestamp | 返回截断为指定单位的时间戳，单位为 [秒、分钟、小时、日、周、月、季度、年] 其中之一。<pre>SELECT date_trunc('minute', TIMESTAMP '2022-06-17 17:44:43.771000000')</pre><br />示例结果：`2022-06-17 17:44:00.000000000` | 

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

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


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

一些间隔字面值可作为 parse\_duration 的简写形式。例如，`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\_format(timestamp, varchar(x)) | varchar | 有关此函数使用的格式说明符的更多信息，请参见 [https://trino.io/docs/current/functions/datetime.html\#mysql](https://trino.io/docs/current/functions/datetime.html#mysql-date-functions)-date-functions<pre>SELECT date_format(TIMESTAMP '2019-10-20 10:20:20', '%Y-%m-%d %H:%i:%s')</pre><br />示例结果：`2019-10-20 10:20:20` | 
| date\_parse(varchar(x), varchar(y)) | timestamp | 有关此函数使用的格式说明符的更多信息，请参见 [https://trino.io/docs/current/functions/datetime.html\#mysql](https://trino.io/docs/current/functions/datetime.html#mysql-date-functions)-date-functions<pre>SELECT date_parse('2019-10-20 10:20:20', '%Y-%m-%d %H:%i:%s')</pre><br />示例结果：`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](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><br />示例结果：`1968-01-13 12` | 
| parse\_datetime(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><br />示例结果：`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\_OF\_MONTH、DAY\_OF\_WEEK、DOW、DAY\_OF\_YEAR、DOY、YEAR\_OF\_WEEK、YOW、HOUR、MINUTE、SECOND] 其中之一。<pre>SELECT extract(YEAR FROM '2019-10-12 23:10:34.000000000')</pre><br />示例结果：`2019` | 
| day(timestamp), day(date), day(interval day to second) | bigint | <pre>SELECT day('2019-10-12 23:10:34.000000000')</pre>示例结果：`12` | 
| day\_of\_month(timestamp), day\_of\_month(date), day\_of\_month(interval day to second) | bigint | <pre>SELECT day_of_month('2019-10-12 23:10:34.000000000')</pre>示例结果：`12` | 
| day\_of\_week(timestamp), day\_of\_week(date) | bigint | <pre>SELECT day_of_week('2019-10-12 23:10:34.000000000')</pre>示例结果：`6` | 
| day\_of\_year(timestamp), day\_of\_year(date) | bigint | <pre>SELECT day_of_year('2019-10-12 23:10:34.000000000')</pre>示例结果：`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 | <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\_of\_year(timestamp), week\_of\_year(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\_of\_week(timestamp), year\_of\_week(date) | bigint | <pre>SELECT year_of_week('2019-10-12 23:10:34.000000000')</pre>示例结果：`2019` | 
| yow(timestamp), yow(date) | bigint | year\_of\_week 的别名 | 