时间和时区
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: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 Clustered中的InfluxQL目前不支持时区子句,该子句将时区偏移应用于查询结果中的UTC时间戳。
显著行为
无法查询多个时间范围
InfluxDB不支持在WHERE
子句中使用OR
来查询多个时间范围。例如,以下查询没有返回任何结果
使用GROUP BY time()
子句查询未来数据
未在WHERE
子句中指定时间范围且不包含GROUP BY time()
子句的查询使用最小和最大时间戳作为默认时间范围。如果查询包含GROUP BY time()
子句,则默认时间范围为从1677-09-21T00:12:43.145224193Z
到now()
。
要查询发生在未来(在now()
之后)的时间戳数据,请提供显式的上界在WHERE
子句中。
无法为持续时间使用参数
目前,InfluxDB不支持在参数化查询中使用持续时间参数。
这个页面有帮助吗?
感谢您的反馈!