文档文档

时间和时区查询

InfluxQL 专为处理时间序列数据而设计,并包含专门用于处理时间的功能。您可以查看以下在 InfluxQL 查询中使用时间和时间戳的方法

配置返回的时间戳

InfluxQL shell 默认以纳秒 UNIX 纪元格式返回时间戳。使用 precision <format> 命令 指定其他格式。

如果您正在使用 InfluxQL shell,请使用精度辅助命令 precision rfc3339 以人类可读的格式查看结果。

InfluxDB API 默认以 RFC3339 格式返回时间戳。使用 epoch 查询字符串参数 指定其他格式。

时间语法

对于大多数 SELECT 语句,默认时间范围介于 1677-09-21 00:12:43.1452241942262-04-11T23:47:16.854775806Z UTC 之间。对于带有 GROUP BY time() 子句SELECT 语句,默认时间范围介于 1677-09-21 00:12:43.145224194 UTC 和 now() 之间。以下部分详细介绍了如何在 SELECT 语句的 WHERE 子句 中指定其他时间范围。

其他支持的功能包括
绝对时间
相对时间

绝对时间

使用日期时间字符串和纪元时间指定绝对时间。

语法

SELECT_clause FROM_clause WHERE time <operator> ['<rfc3339_date_time_string>' | '<rfc3339_like_date_time_string>' | <epoch_time>] [AND ['<rfc3339_date_time_string>' | '<rfc3339_like_date_time_string>' | <epoch_time>] [...]]

支持的运算符

运算符含义
=等于
<>不等于
!=不等于
>大于
>=大于或等于
<小于
<=小于或等于

目前,InfluxDB 不支持在 WHERE 子句中使用带有绝对时间的 OR。有关更多信息,请参阅 常见问题解答 文档和 GitHub Issue

rfc3339_date_time_string

'YYYY-MM-DDTHH:MM:SS.nnnnnnnnnZ'

.nnnnnnnnn 是可选的,如果未包含,则设置为 .000000000RFC3339 日期时间字符串需要单引号。

rfc3339_like_date_time_string

'YYYY-MM-DD HH:MM:SS.nnnnnnnnn'

HH:MM:SS.nnnnnnnnn.nnnnnnnnn 是可选的,如果未包含,则设置为 00:00:00.000000000。类似 RFC3339 的日期时间字符串需要单引号。

epoch_time

纪元时间是自 1970 年 1 月 1 日星期四协调世界时 (UTC) 00:00:00 以来经过的时间量。

默认情况下,InfluxDB 假定所有纪元时间戳都以纳秒为单位。在纪元时间戳的末尾包含一个 持续时间文字,以指示纳秒以外的精度。

基本算术

所有时间戳格式都支持基本算术。使用 持续时间文字 从时间戳中添加 (+) 或减去 (-) 时间。请注意,InfluxQL 要求在 +- 与持续时间文字之间有一个空格。

示例

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

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

使用纪元时间戳指定时间范围

使用秒精度纪元时间戳指定时间范围

对类似 RFC3339 的日期时间字符串执行基本算术运算

对纪元时间戳执行基本算术运算

相对时间

使用 now() 查询相对于服务器当前时间戳 的数据。

语法

SELECT_clause FROM_clause WHERE time <operator> now() [[ - | + ] <duration_literal>] [(AND|OR) now() [...]]

now() 是服务器在服务器上执行查询时的 Unix 时间。-+持续时间文字 之间的空格是必需的。

支持的运算符

运算符含义
=等于
<>不等于
!=不等于
>大于
>=大于或等于
<小于
<=小于或等于

duration_literal

  • 微秒: uµ
  • 毫秒: ms
  • s
  • 分钟m
  • 小时:h
  • 天:d
  • 周:w

示例

使用相对时间指定时间范围

使用绝对时间和相对时间指定时间范围

时区子句

使用 tz() 子句返回指定时区的 UTC 偏移量。

语法

SELECT_clause FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause] tz('<time_zone>')

默认情况下,InfluxDB 以 UTC 格式存储和返回时间戳。tz() 子句在查询返回的时间戳中包含 UTC 偏移量,或者如果适用,则包含 UTC 夏令时 (DST) 偏移量。返回的时间戳必须采用 RFC3339 格式,才能显示 UTC 偏移量或 UTC DST。time_zone 参数遵循 互联网号码分配机构时区数据库 中的 TZ 语法,并且需要单引号。

示例

返回芝加哥时区的 UTC 偏移量

时间语法的常见问题

使用 OR 选择多个时间间隔

InfluxDB 不支持在 WHERE 子句中使用 OR 运算符来指定多个时间间隔。

有关更多信息,请参阅 常见问题解答

使用 GROUP BY time() 子句查询 now() 之后发生的数据

大多数 SELECT 语句的默认时间范围介于 1677-09-21 00:12:43.1452241942262-04-11T23:47:16.854775806Z UTC 之间。对于带有 GROUP BY time() 子句SELECT 语句,默认时间范围介于 1677-09-21 00:12:43.145224194 UTC 和 now() 之间。

要查询时间戳发生在 now() 之后的数据,带有 GROUP BY time() 子句的 SELECT 语句必须在 WHERE 子句中提供备用上限。


此页面是否对您有帮助?

感谢您的反馈!


Flux 的未来

Flux 即将进入维护模式。您可以继续像现在这样使用它,而无需对您的代码进行任何更改。

阅读更多

现已全面上市

InfluxDB 3 Core 和 Enterprise

快速启动。更快扩展。

获取更新

InfluxDB 3 Core 是一个开源、高速、近实时数据引擎,它可以实时收集和处理数据,并将其持久化到本地磁盘或对象存储。InfluxDB 3 Enterprise 基于 Core 的基础构建,增加了高可用性、只读副本、增强的安全性以及数据压缩,以实现更快的查询和优化的存储。InfluxDB 3 Enterprise 提供免费层级,供非商业的家庭或业余爱好者使用。

了解更多信息,请查看