文档文档

WHERE 子句

使用 WHERE 子句根据 字段值标签值时间戳 筛选数据。

语法

SELECT_clause FROM_clause WHERE <conditional_expression> [(AND|OR) <conditional_expression> [...]]
  • conditional_expression:两个操作数之间的比较,结果为 truefalse。比较逻辑由表达式中使用的运算符决定。这些表达式可以对 InfluxDB 字段、标签和时间戳进行操作。使用逻辑运算符(ANDOR)将多个条件表达式链接在一起。

运算符

运算符评估两个操作数之间的关系,并返回 truefalse

比较运算符

运算符含义支持的数据类型
=等于全部
<>不等于全部
!=不等于全部
>大于数值型,时间戳
>=大于或等于数值型,时间戳
<小于数值型,时间戳
<=小于或等于数值型,时间戳
=~匹配正则表达式字符串
!~不匹配正则表达式字符串

逻辑运算符

运算符含义
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 子句示例

以下示例使用家庭传感器示例数据集

选择具有特定标签值的数据

选择特定时间范围内的数据

选择相对时间范围内的数据

选择高于阈值的字段值

选择特定字段值

基于算术运算选择字段值

选择字段值高于阈值且具有特定标签值的数据

根据列之间的关系选择数据

值得注意的行为

单引号和双引号

在 InfluxQL 中,单引号 (') 和双引号 (") 的工作方式不同,可能会改变 WHERE 子句的功能。单引号用于字符串时间戳字面量。双引号用于引用标识符(时间、字段和标签列名)。

例如,以下条件表达式将 location 的值与 字面字符串 London 进行比较

"location" = 'London'

以下条件表达式将 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')

此页内容是否对您有帮助?

感谢您的反馈!


Flux 的未来

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

阅读更多

现已全面上市

InfluxDB 3 Core 和 Enterprise

快速启动。更快扩展。

获取更新

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

有关更多信息,请查看