文档说明

时间和时区

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
支持的时间戳值
RFC3339Unix纳秒时间
最大值2262-04-11T23:47:16.854775807Z9223372036854775807
最小值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逻辑运算符来查询多个时间范围。

查询示例

以下示例使用家庭传感器样本数据集

使用RFC3339日期时间字符串指定时间范围

使用类似RFC3339的日期时间字符串指定时间范围

使用纳秒级时间戳指定时间范围

使用秒级精度的时间戳指定时间范围

相对于时间戳指定时间范围

相对于当前时间指定时间范围

时区子句

InfluxDB Clustered中的InfluxQL目前不支持时区子句,该子句将时区偏移应用于查询结果中的UTC时间戳。

显著行为

无法查询多个时间范围

InfluxDB不支持在WHERE子句中使用OR来查询多个时间范围。例如,以下查询没有返回任何结果

SELECT *
FROM home
WHERE
  (time >= '2022-01-01T08:00:00Z' AND time <= '2022-01-01T10:00:00Z')
  OR (time >= '2022-01-01T18:00:00Z' AND time <= '2022-01-01T20:00:00Z')

使用GROUP BY time()子句查询未来数据

未在WHERE子句中指定时间范围且不包含GROUP BY time()子句的查询使用最小和最大时间戳作为默认时间范围。如果查询包含GROUP BY time()子句,则默认时间范围为从1677-09-21T00:12:43.145224193Znow()

要查询发生在未来(在now()之后)的时间戳数据,请提供显式的上界在WHERE子句中。

无法为持续时间使用参数

目前,InfluxDB不支持在参数化查询中使用持续时间参数。


这个页面有帮助吗?

感谢您的反馈!


Flux的未来

Flux将进入维护模式。您无需修改代码即可继续像现在一样使用它。

阅读更多

InfluxDB v3增强功能及InfluxDB集群版现已全面上市

新功能包括更快的查询性能和管理工具,推进了InfluxDB v3产品线。InfluxDB集群版现已全面上市。

InfluxDB v3性能和功能

InfluxDB v3产品线在查询性能方面取得了显著提升,并提供了新的管理工具。这些增强包括用于监控InfluxDB集群健康状况的操作仪表板、InfluxDB云专用版中的单一登录(SSO)支持以及用于令牌和数据库的新管理API。

了解v3增强功能


InfluxDB集群版全面上市

InfluxDB集群版现已全面上市,为您在自管理的堆栈中提供InfluxDB v3的强大功能。

与我们讨论InfluxDB集群版