时间和时区
InfluxDB 3核心正在进行公开测试
InfluxDB 3 Core 正在进行公开 alpha 测试,并可供测试和反馈,但不适合用于生产环境。产品和本文件都是进行中的工作。我们欢迎并鼓励您分享您对 alpha 版本的体验,并邀请您加入我们的公共频道以获取更新和分享反馈。
InfluxQL旨在处理时间序列数据,并包含特定于处理时间的功能。 您可以查看以下在您的InfluxQL查询中处理时间和时间戳的方法:
时间语法
InfluxQL 支持以下时间戳文字语法:
'2006-01-02T15:04:05.00Z' -- RFC3339 date-time string
'2006-01-02 15:04:05.00' -- RFC3339-like date-time string
1136189045000000000 -- Unix nanosecond epoch time
1136189045s -- Unix epoch time
- RFC3339日期时间字符串:
字符串字面量 使用
RFC3339时间戳格式,
YYYY-MM-DDTHH:MM:SS.nnnnnnnnnZ. - RFC3339样式的日期时间字符串:
字符串字面量 使用
RFC3339样式的时间戳格式,
YYYY-MM-DD HH:MM:SS.nnnnnnnnn。 - Unix纳秒纪元时间: Integer 表示自 Unix纪元以来已过去的纳秒数。
- Unix纪元时间: 持续时间文字 表示自 Unix纪元 以来经过的指定时间单位的数量。 查看支持的持续时间单位.
支持的时间戳值
| RFC3339 | Unix纳秒时间 | |
|---|---|---|
| 最大值 | 2262-04-11T23:47:16.854775807Z | 9223372036854775807 |
| 最小值 | 1677-09-21T00:12:43.145224193Z | -9223372036854775807 |
添加和减去时间值
时间戳值支持与持续时间字面量的加法和减法操作。将一个持续时间加 (+) 或减 (-) 去一个时间戳以返回更新后的时间戳。
'2023-01-01T00:00:00Z' + 2h -- Resolves to 2023-01-01T02:00:00Z
'2023-01-01 00:00:00' - 20h -- Resolves to 2022-12-31T04:00:00Z
1672531200000000000 + 1y -- Resolves to 2024-01-01T00:00:00Z
InfluxQL 在 + 运算符 - 和持续时间文本之间需要一个空格。
查询时间范围
要指定查询的时间范围,请在
WHERE 子句中使用条件表达式,
比较 time 列的值与绝对时间戳或相对时间戳。
绝对时间范围: 使用时间戳字面量定义查询时间边界
WHERE time >= '2023-01-01T00:00:00Z' AND time <= '2023-07-01T00:00:00Z' WHERE time >= '2023-01-01 00:00:00' AND time <= '2023-07-01 00:00:00' WHERE time >= 1672531200000000000 AND time <= 1688169600000000000 WHERE time >= 1672531200s and time <= 1688169600000ms相对时间范围: 定义查询时间边界,通过添加或减去持续时间字面量到时间戳字面量。
使用
now()返回当前系统时间(UTC)。-- Query data from the last day WHERE time >= now() - 1d -- Query data from the previous week WHERE time >= now() - 1w AND time <= now() - 2w -- Query data relative to a specific time WHERE time >= '2023-01-01' - 1w AND time <= '2023-01-01' + 1w
支持的操作符
带有时间操作数的条件表达式支持以下比较运算符:
| 操作符 | 含义 |
|---|---|
= | 等于 |
<> | 不等于 |
!= | 不等于 |
> | 大于 |
>= | 大于或等于 |
< | 小于 |
<= | 小于或等于 |
InfluxQL 支持 AND 逻辑运算符来定义查询时间范围,但不支持使用 OR 逻辑运算符来查询多个时间范围。
查询示例
以下示例使用 开始使用家庭传感器示例数据集。
时区条款
默认情况下,InfluxDB 以 UTC 存储和返回时间戳。使用时区子句和 tz() 函数,将时区偏移应用于 UTC 时间,并返回指定时区的时间戳,包括任何适用的季节性偏移,例如夏令时 (DST) 或英国夏令时 (BST)。
SELECT_clause FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause] tz('time_zone')
- time_zone: 用于调整时间的时区字符串文字。使用在互联网分配数字管理局时区数据库中定义的时区名称。
时区示例
显著行为
无法查询多个时间范围
InfluxDB 不支持在 WHERE 子句中使用 OR 来查询多个时间范围。 例如,以下查询将返回无结果:
使用GROUP BY time()子句查询未来数据
在WHERE子句中未指定时间范围且未包含GROUP BY time()子句的查询使用最小和最大时间戳作为默认时间范围。如果查询包含GROUP BY time()子句,默认时间范围在1677-09-21T00:12:43.145224193Z和now()之间。
要查询未来发生的时间戳的数据(在 now() 之后),请在 WHERE 子句中提供一个明确的上限。
无法为持续时间使用参数
目前,InfluxDB不支持在参数化查询中使用持续时间的参数。