本文翻译自官网,官网地址:(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
Select data that have specific field key-values
Select data that have a specific string field key-value
InfluxQL requires single quotes around string field values in the WHERE clause.Select data that have a specific field key-value and perform basic arithmetic
Select data that have a specific tag key-value
InfluxQL requires single quotes around tag values in the WHERE clause.Select data that have specific field key-values and tag key-values
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返回了预期中的结果。
在下面的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返回了预期中的结果。