时间和时区
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 纳秒纪元时间:代表自 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:00ZInfluxQL 要求在 +、- 操作符和持续时间字面量之间有一个空格。
查询时间范围
要指定查询的时间范围,请在 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 不支持在 参数化查询中使用参数来表示持续时间。
此页面是否有帮助?
感谢您的反馈!
支持和反馈
感谢您成为我们社区的一员!我们欢迎并鼓励您对 InfluxDB 3 Core 和本文档提供反馈和错误报告。要获得支持,请使用以下资源
具有年度合同或支持合同的客户可以 联系 InfluxData 支持。