时间和时区查询
InfluxQL 专为处理时间序列数据而设计,并包含专门用于处理时间的功能。您可以查看以下在 InfluxQL 查询中使用时间和时间戳的方法
配置返回的时间戳
InfluxQL shell 默认以纳秒 UNIX 纪元格式返回时间戳。使用 precision <format> 命令 指定其他格式。
如果您正在使用 InfluxQL shell,请使用精度辅助命令 precision rfc3339 以人类可读的格式查看结果。
InfluxDB API 默认以 RFC3339 格式返回时间戳。使用 epoch 查询字符串参数 指定其他格式。
时间语法
对于大多数 SELECT 语句,默认时间范围介于 1677-09-21 00:12:43.145224194 和 2262-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 是可选的,如果未包含,则设置为 .000000000。RFC3339 日期时间字符串需要单引号。
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 要求在 + 或 - 与持续时间文字之间有一个空格。
示例
相对时间
语法
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 语法,并且需要单引号。
示例
时间语法的常见问题
使用 OR 选择多个时间间隔
InfluxDB 不支持在 WHERE 子句中使用 OR 运算符来指定多个时间间隔。
有关更多信息,请参阅 常见问题解答。
使用 GROUP BY time() 子句查询 now() 之后发生的数据
大多数 SELECT 语句的默认时间范围介于 1677-09-21 00:12:43.145224194 和 2262-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 子句中提供备用上限。
此页面是否对您有帮助?
感谢您的反馈!