文档文档

时间和时区

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 以 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')

时区示例

返回芝加哥时区的 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 不支持在 参数化查询中使用参数来表示持续时间。


此页面是否有帮助?

感谢您的反馈!


InfluxDB 3.8 新特性

InfluxDB 3.8 和 InfluxDB 3 Explorer 1.6 的主要增强功能。

查看博客文章

InfluxDB 3.8 现已适用于 Core 和 Enterprise 版本,同时发布了 InfluxDB 3 Explorer UI 的 1.6 版本。本次发布着重于操作成熟度,以及如何更轻松地部署、管理和可靠地运行 InfluxDB。

更多信息,请查看

InfluxDB Docker 的 latest 标签将指向 InfluxDB 3 Core

在 **2026 年 2 月 3 日**,InfluxDB Docker 镜像的 latest 标签将指向 InfluxDB 3 Core。为避免意外升级,请在您的 Docker 部署中使用特定的版本标签。

如果使用 Docker 来安装和运行 InfluxDB,latest 标签将指向 InfluxDB 3 Core。为避免意外升级,请在您的 Docker 部署中使用特定的版本标签。例如,如果使用 Docker 运行 InfluxDB v2,请将 latest 版本标签替换为 Docker pull 命令中的特定版本标签 — 例如

docker pull influxdb:2