WHERE 子句
使用 WHERE
子句根据 字段值、标签值 和 时间戳 过滤数据。
语法
SELECT_clause FROM_clause WHERE <conditional_expression> [(AND|OR) <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 | 客厅 | 21.1 |
2022-01-01T09:00:00Z | 0 | 35.9 | 客厅 | 21.4 |
2022-01-01T10:00:00Z | 0 | 36 | 客厅 | 21.8 |
2022-01-01T11:00:00Z | 0 | 36 | 客厅 | 22.2 |
2022-01-01T12:00:00Z | 0 | 35.9 | 客厅 | 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 | 厨房 | 21 |
2022-01-01T08:00:00Z | 0 | 35.9 | 客厅 | 21.1 |
2022-01-01T09:00:00Z | 0 | 36.2 | 厨房 | 23 |
2022-01-01T09:00:00Z | 0 | 35.9 | 客厅 | 21.4 |
2022-01-01T10:00:00Z | 0 | 36.1 | 厨房 | 22.7 |
2022-01-01T10:00:00Z | 0 | 36 | 客厅 | 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 | 厨房 | 23.3 |
2022-01-01T18:00:00Z | 9 | 36.2 | 客厅 | 22.8 |
2022-01-01T19:00:00Z | 22 | 36.6 | 厨房 | 23.1 |
2022-01-01T19:00:00Z | 14 | 36.3 | 客厅 | 22.5 |
2022-01-01T20:00:00Z | 26 | 36.5 | 厨房 | 22.7 |
2022-01-01T20:00:00Z | 17 | 36.4 | 客厅 | 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 | 厨房 | 9 |
2022-01-01T18:00:00Z | 客厅 | 9 |
根据算术选择字段值
SELECT room, co FROM home WHERE co - 10 > 5
time | room | co |
---|
2022-01-01T18:00:00Z | 厨房 | 18 |
2022-01-01T19:00:00Z | 厨房 | 22 |
2022-01-01T20:00:00Z | 客厅 | 17 |
2022-01-01T20:00:00Z | 厨房 | 26 |
选择字段值高于阈值且具有特定标签值的数据
SELECT * FROM home WHERE temp > 22.7 AND room = 'Kitchen'
time | co | hum | room | temp |
---|
2022-01-01T09:00:00Z | 0 | 36.2 | 厨房 | 23 |
2022-01-01T13:00:00Z | 1 | 36.5 | 厨房 | 22.8 |
2022-01-01T14:00:00Z | 1 | 36.3 | 厨房 | 22.8 |
2022-01-01T18:00:00Z | 18 | 36.9 | 厨房 | 23.3 |
2022-01-01T19:00:00Z | 22 | 36.6 | 厨房 | 23.1 |
根据列之间的关系选择数据
SELECT co, temp FROM home WHERE co > temp
time | co | temp |
---|
2022-01-01T20:00:00Z | 26 | 22.7 |
显著行为
单引号和双引号
In 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和此文档提供反馈和错误报告。要获取支持,请使用以下资源
拥有年度或支持合同的客户可以联系InfluxData支持。