WHERE 子句
InfluxDB 3 Core 处于公开 Alpha 阶段
InfluxDB 3 Core 处于公开 alpha 阶段,可用于测试和反馈,但不适用于生产环境。产品和本文档都还在开发中。我们欢迎并鼓励您提供关于 alpha 体验的输入,并邀请您加入我们的公共频道以获取更新和分享反馈。
Alpha 预期和建议
- 在 alpha 期间,我们可能会进行破坏性更改,这可能需要您删除数据并重新开始。如果您使用的数据很重要,请在其他地方保留备份副本。
- 在 alpha 期间,我们在每次合并到 InfluxDB
main
分支时都会生成新的构建版本。更改频繁,相关更新会发布到我们的公共频道。
使用 WHERE
子句根据字段值、标签值和时间戳筛选数据。
语法
SELECT_clause FROM_clause WHERE <conditional_expression> [(AND|OR) <conditional_expression> [...]]
- conditional_expression:两个操作数之间的比较,结果为
true
或 false
。比较逻辑由表达式中使用的运算符决定。这些表达式可以对 InfluxDB 字段、标签和时间戳进行操作。使用逻辑运算符(AND
、OR
)将多个条件表达式链接在一起。
运算符
运算符评估两个操作数之间的关系,并返回 true
或 false
。
比较运算符
运算符 | 含义 | 支持的数据类型 |
---|
= | 等于 | 所有 |
<> | 不等于 | 所有 |
!= | 不等于 | 所有 |
> | 大于 | 数值,时间戳 |
>= | 大于或等于 | 数值,时间戳 |
< | 小于 | 数值,时间戳 |
<= | 小于或等于 | 数值,时间戳 |
=~ | 匹配正则表达式 | 字符串 |
!~ | 不匹配正则表达式 | 字符串 |
逻辑运算符
运算符 | 含义 |
---|
AND | 如果两个操作数都为 true ,则返回 true 。否则,返回 false 。 |
OR | 如果任何操作数为 true ,则返回 true 。否则,返回 false 。 |
时间范围
使用 WHERE
子句指定要查询的时间范围。如果 WHERE
子句中未指定时间范围,则使用默认时间范围。
时间戳存储在 time
列中。使用比较运算符将 time
列的值与时间戳字面量、整数(Unix 纳秒时间戳)或表达式进行比较。
WHERE
time >= '2023-01-01T00:00:00Z'
AND time < '2023-07-01T00:00:00Z'
WHERE
time >= 1672531200000000000
AND time < 1688169600000000000
WHERE
time >= now() - 1d
AND time < now()
有关如何在 WHERE
子句中指定替代时间范围的信息,请参阅时间语法。
正则表达式函数
正则表达式可用于使用正则表达式比较运算符评估 WHERE
子句中的字符串值
SELECT * FROM home WHERE room =~ /^K/
有关 InfluxQL 正则表达式语法的更多信息,请参阅InfluxQL 正则表达式。
WHERE 子句示例
以下示例使用家庭传感器示例数据集。
选择具有特定标签值的数据
SELECT * FROM home WHERE room = 'Living Room'
time | co | hum | room | temp |
---|
2022-01-01T08:00:00Z | 0 | 35.9 | Living Room | 21.1 |
2022-01-01T09:00:00Z | 0 | 35.9 | Living Room | 21.4 |
2022-01-01T10:00:00Z | 0 | 36 | Living Room | 21.8 |
2022-01-01T11:00:00Z | 0 | 36 | Living Room | 22.2 |
2022-01-01T12:00:00Z | 0 | 35.9 | Living Room | 22.2 |
… | … | … | … | … |
从特定时间范围选择数据
SELECT *
FROM home
WHERE
time >= '2022-01-01T08:00:00Z'
AND time <= '2022-01-01T10:00:00Z'
time | co | hum | room | temp |
---|
2022-01-01T08:00:00Z | 0 | 35.9 | Kitchen | 21 |
2022-01-01T08:00:00Z | 0 | 35.9 | Living Room | 21.1 |
2022-01-01T09:00:00Z | 0 | 36.2 | Kitchen | 23 |
2022-01-01T09:00:00Z | 0 | 35.9 | Living Room | 21.4 |
2022-01-01T10:00:00Z | 0 | 36.1 | Kitchen | 22.7 |
2022-01-01T10:00:00Z | 0 | 36 | Living Room | 21.8 |
从相对时间范围选择数据
SELECT * FROM home WHERE time >= '2022-01-01T20:00:00Z' - 2h
time | co | hum | room | temp |
---|
2022-01-01T18:00:00Z | 18 | 36.9 | Kitchen | 23.3 |
2022-01-01T18:00:00Z | 9 | 36.2 | Living Room | 22.8 |
2022-01-01T19:00:00Z | 22 | 36.6 | Kitchen | 23.1 |
2022-01-01T19:00:00Z | 14 | 36.3 | Living Room | 22.5 |
2022-01-01T20:00:00Z | 26 | 36.5 | Kitchen | 22.7 |
2022-01-01T20:00:00Z | 17 | 36.4 | Living Room | 22.2 |
选择高于阈值的字段值
SELECT co FROM home WHERE co > 9
time | co |
---|
2022-01-01T18:00:00Z | 18 |
2022-01-01T19:00:00Z | 14 |
2022-01-01T19:00:00Z | 22 |
2022-01-01T20:00:00Z | 17 |
2022-01-01T20:00:00Z | 26 |
选择特定字段值
SELECT room, co FROM home WHERE co = 9
time | room | co |
---|
2022-01-01T17:00:00Z | Kitchen | 9 |
2022-01-01T18:00:00Z | Living Room | 9 |
基于算术运算选择字段值
SELECT room, co FROM home WHERE co - 10 > 5
time | room | co |
---|
2022-01-01T18:00:00Z | Kitchen | 18 |
2022-01-01T19:00:00Z | Kitchen | 22 |
2022-01-01T20:00:00Z | Living Room | 17 |
2022-01-01T20:00:00Z | Kitchen | 26 |
选择字段值高于阈值且具有特定标签值的数据
SELECT * FROM home WHERE temp > 22.7 AND room = 'Kitchen'
time | co | hum | room | temp |
---|
2022-01-01T09:00:00Z | 0 | 36.2 | Kitchen | 23 |
2022-01-01T13:00:00Z | 1 | 36.5 | Kitchen | 22.8 |
2022-01-01T14:00:00Z | 1 | 36.3 | Kitchen | 22.8 |
2022-01-01T18:00:00Z | 18 | 36.9 | Kitchen | 23.3 |
2022-01-01T19:00:00Z | 22 | 36.6 | Kitchen | 23.1 |
根据列之间的关系选择数据
SELECT co, temp FROM home WHERE co > temp
time | co | temp |
---|
2022-01-01T20:00:00Z | 26 | 22.7 |
值得注意的行为
单引号和双引号
在 InfluxQL 中,单引号 ('
) 和双引号 ("
) 的工作方式不同,可能会改变 WHERE
子句的功能。单引号用于字符串和时间戳字面量。双引号用于引用标识符(时间、字段和标签列名)。
例如,以下条件表达式将 location
列的值与字面字符串 London
进行比较
以下条件表达式将 location
列的值与 London
列的值进行比较
在 WHERE
子句中误用双引号和单引号通常会导致意外的空查询结果。有关引号的更多信息,请参阅InfluxQL 引号。
无法查询多个时间范围
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')
支持和反馈
感谢您成为我们社区的一份子!我们欢迎并鼓励您提供关于 InfluxDB 3 Core 和本文档的反馈和错误报告。要寻求支持,请使用以下资源
拥有年度合同或支持合同的客户可以联系 InfluxData 支持。