本文翻译自官网,官网地址:(https://docs.influxdata.com/influxdb/v1.7/query_language/data_exploration/)

WHERE子句

语法:

SELECT_clause FROM_clause WHERE <conditional_expression> [(AND|OR) <conditional_expression> [...]]

:在WHERE子句中,支持在fields, tags, and timestamps上进行条件表达式的运算。

:在InfluxDB的WHERE子句中,不支持使用 OR 来指定不同的time区间,如下面的sql将会返回空:

SELECT * FROM "absolutismus" WHERE time = '2016-07-31T20:07:00Z' OR time = '2016-07-31T23:07:17Z'

Fields

语法如下:

field_key <operator> ['string' | boolean | float | integer]

在WHERE子句中,支持对string, boolean, float 和 integer类型的field values进行比较。

注意 :在WHERE子句中,如果是string类型的field value,一定要用单引号括起来。如果不适用引号括起来,或者使用的是双引号,将不会返回任何数据,有时甚至都不报错!

WHERE支持的运算符如下:

=equal to
<>not equal to
!=not equal to
>greater than
>=greater than or equal to
<less than
<=less than or equal to

支持的更多运算符详见: Arithmetic Operations, Regular Expressions

Tags

语法如下:

tag_key <operator> ['tag_value']

对于在WHERE子句中的tag values,也要用单引号括起来。如果不用引号括起来,或者使用双引号,则查询不会返回任务数据。甚至不会报错。

Tag支持的运算符如下:

=equal to
<>not equal to
!=not equal to

还支持正则运算: Regular Expressions

Timestamps

对于大部分的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()。

Time Syntax 小节将会介绍如何在WHERE子句中指定时间 区间。


WHERE示例sql

  1. Select data that have specific field key-values

    5.InfluxDB-InfluxQL基础语法教程--WHERE子句-LMLPHP

  2. Select data that have a specific string field key-value

    5.InfluxDB-InfluxQL基础语法教程--WHERE子句-LMLPHP

    InfluxQL requires single quotes around string field values in the WHERE clause.

  3. Select data that have a specific field key-value and perform basic arithmetic

    5.InfluxDB-InfluxQL基础语法教程--WHERE子句-LMLPHP

  4. Select data that have a specific tag key-value

    5.InfluxDB-InfluxQL基础语法教程--WHERE子句-LMLPHP

    InfluxQL requires single quotes around tag values in the WHERE clause.

  5. Select data that have specific field key-values and tag key-values

    5.InfluxDB-InfluxQL基础语法教程--WHERE子句-LMLPHP

    The WHERE clause supports the operators AND and OR, and supports separating logic with parentheses.


关于WHERE语句的常见疑问

问题 :where子句查询意外地未返回任何数据。

:通常情况,出现该问题是因为在WHERE子句中没有对tag values或string类型的field values使用单引号括起来的缘故。对于WHERE子句中的tag values或string类型的field values,如果没有用引号括起来,或者是用的双引号,这种时候,查询不会返回任何结果,有时甚至也不会报错。

在下面的示例sql中,对tag value的引号使用做说明。第一个sql没有对tag value使用引号,第二个sql对tag value使用了双引号,第三个sql则对tag value使用了单引号。可以看到,第一和第二个sql都没有返回任何查询结果,而第三个sql返回了预期中的结果。

5.InfluxDB-InfluxQL基础语法教程--WHERE子句-LMLPHP

在下面的sql对string类型的field value的引号情况做说明,其中field value为“at or greater than 9 feet”。第一个sql没有对field value使用引号,第二个sql对field value使用了双引号,第三个sql则对field value使用了单引号。可以看到,第一个sql报错了,因为field valus中包含了空格。第二个sql虽然没报错,但是查询结果为空。第三个sql返回了预期中的结果。

5.InfluxDB-InfluxQL基础语法教程--WHERE子句-LMLPHP

05-26 18:35