全部产品
Search
文档中心

WHERE语句

更新时间: 2020-07-02

WHERE子句根据field、tag和/或timestamp来过滤数据。

语法

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

语法描述

WHERE子句支持在field、tag和timestamp上的条件表达式(conditional_expression)。

field

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

WHERE子句支持对field value进行比较,field value可以是字符串、布尔值、浮点数或者整数。

WHERE子句中,请对字符串类型的field value用单引号括起来。如果字符串类型的field value没有使用引号或者使用了双引号,那么不会返回任何查询结果,在大多数情况下,也不会返回错误。

支持的操作符:

= 等于
<> 不等于
!= 不等于
> 大于
>= 大于或等于
< 小于
<= 小于或等于

除此之外,还支持的功能:算术运算和正则表达式

tag

  1. tag_key <operator> ['tag_value']

WHERE子句中,请对tag value用单引号括起来。如果tag value没有使用引号或者使用了双引号,那么不会返回任何查询结果,在大多数情况下,也不会返回错误。

支持的操作符:

= 等于
<> 不等于
!= 不等于

除此之外,还支持的功能:正则表达式

timestamp

对于大多数SELECT语句,默认的时间范围是从1677-09-21 00:12:43.145224194 UTC2262-04-11T23:47:16.854775806Z UTC。对于带GROUP BY time()子句的SELECT语句,默认的时间范围是从1677-09-21 00:12:43.145224194 UTCnow()

时间语法章节将详细介绍如何在WHERE子句中指定其它的时间范围。

示例

查询field value满足一定条件的数据

  1. > SELECT * FROM "h2o_feet" WHERE "water_level" > 8
  2. name: h2o_feet
  3. --------------
  4. time level description location water_level
  5. 2015-08-18T00:00:00Z between 6 and 9 feet coyote_creek 8.12
  6. 2015-08-18T00:06:00Z between 6 and 9 feet coyote_creek 8.005
  7. [...]
  8. 2015-09-18T00:12:00Z between 6 and 9 feet coyote_creek 8.189
  9. 2015-09-18T00:18:00Z between 6 and 9 feet coyote_creek 8.084

该查询返回h2o_feet中的数据,这些数据满足条件:field key water_level的值大于8。

查询field value满足一定条件的数据(field value是字符串类型)

  1. > SELECT * FROM "h2o_feet" WHERE "level description" = 'below 3 feet'
  2. name: h2o_feet
  3. --------------
  4. time level description location water_level
  5. 2015-08-18T00:00:00Z below 3 feet santa_monica 2.064
  6. 2015-08-18T00:06:00Z below 3 feet santa_monica 2.116
  7. [...]
  8. 2015-09-18T14:06:00Z below 3 feet santa_monica 2.999
  9. 2015-09-18T14:36:00Z below 3 feet santa_monica 2.907

该查询返回h2o_feet中的数据,这些数据满足条件:field key level description的值等于字符串below 3 feet。在WHERE子句中,需要用单引号将字符串类型的field value括起来。

查询field value满足一定条件的数据(WHERE子句包含基本运算)

  1. > SELECT * FROM "h2o_feet" WHERE "water_level" + 2 > 11.9
  2. name: h2o_feet
  3. --------------
  4. time level description location water_level
  5. 2015-08-29T07:06:00Z at or greater than 9 feet coyote_creek 9.902
  6. 2015-08-29T07:12:00Z at or greater than 9 feet coyote_creek 9.938
  7. 2015-08-29T07:18:00Z at or greater than 9 feet coyote_creek 9.957
  8. 2015-08-29T07:24:00Z at or greater than 9 feet coyote_creek 9.964
  9. 2015-08-29T07:30:00Z at or greater than 9 feet coyote_creek 9.954
  10. 2015-08-29T07:36:00Z at or greater than 9 feet coyote_creek 9.941
  11. 2015-08-29T07:42:00Z at or greater than 9 feet coyote_creek 9.925
  12. 2015-08-29T07:48:00Z at or greater than 9 feet coyote_creek 9.902
  13. 2015-09-02T23:30:00Z at or greater than 9 feet coyote_creek 9.902

该查询返回h2o_feet中的数据,这些数据满足条件:field key water_level的值加上2大于11.9。请注意,TSDB For InfluxDB®遵循标准的算术运算顺序。可查看数学运算符章节了解更多相关信息。

查询tag value满足一定条件的数据

  1. > SELECT "water_level" FROM "h2o_feet" WHERE "location" = 'santa_monica'
  2. name: h2o_feet
  3. --------------
  4. time water_level
  5. 2015-08-18T00:00:00Z 2.064
  6. 2015-08-18T00:06:00Z 2.116
  7. [...]
  8. 2015-09-18T21:36:00Z 5.066
  9. 2015-09-18T21:42:00Z 4.938

该查询返回h2o_feet中的数据,这些数据满足条件:tag key location的值是santa_monica。在WHERE子句中,需要用单引号将字符串类型的tag value括起来。

查询field value和tag value都满足一定条件的数据

  1. > SELECT "water_level" FROM "h2o_feet" WHERE "location" <> 'santa_monica' AND ("water_level" < -0.59 OR "water_level" > 9.95)
  2. name: h2o_feet
  3. --------------
  4. time water_level
  5. 2015-08-29T07:18:00Z 9.957
  6. 2015-08-29T07:24:00Z 9.964
  7. 2015-08-29T07:30:00Z 9.954
  8. 2015-08-29T14:30:00Z -0.61
  9. 2015-08-29T14:36:00Z -0.591
  10. 2015-08-30T15:18:00Z -0.594

该查询返回h2o_feet中的数据,这些数据满足条件:tag key location的值不等于santa_monica,并且,field key water_level的值小于-0.59或大于9.95。WHERE子句支持操作符ANDOR,并支持用括号将它们的逻辑分开。

查询timestamp满足一定条件的数据

  1. > SELECT * FROM "h2o_feet" WHERE time > now() - 7d

该查询返回h2o_feet中的数据,这些数据满足条件:timestamp在过去7天内。本页面中的时间语法章节将详细介绍WHERE子句中支持的时间语法。

WHERE子句的常见问题

WHERE子句出现异常则没有结果返回

在大多数情况下,引起这个问题的原因是tag value或字符串类型的field value缺少单引号。如果tag value或字符串类型的field value没有使用引号或者使用了双引号,那么不会返回任何查询结果,在大多数情况下,也不会返回错误。

下面的代码块中,前两个查询分别尝试没有用引号或者尝试用双引号来指定tag value:santa_monica,这两个查询不会返回任何结果。第三个查询使用了单引号将santa_monica括起来(这是支持的语法),返回了预期的结果。

  1. > SELECT "water_level" FROM "h2o_feet" WHERE "location" = santa_monica
  2. > SELECT "water_level" FROM "h2o_feet" WHERE "location" = "santa_monica"
  3. > SELECT "water_level" FROM "h2o_feet" WHERE "location" = 'santa_monica'
  4. name: h2o_feet
  5. --------------
  6. time water_level
  7. 2015-08-18T00:00:00Z 2.064
  8. [...]
  9. 2015-09-18T21:42:00Z 4.938

下面的代码块中,前两个查询分别尝试没有用引号或者尝试用双引号来指定字符串类型的field value:at or greater than 9 feet。第一个查询返回错误,因为该field value包含空格。第二个查询没有返回任何结果。第三个查询使用了单引号将at or greater than 9 feet括起来(这是支持的语法),返回了预期的结果。

  1. > SELECT "level description" FROM "h2o_feet" WHERE "level description" = at or greater than 9 feet
  2. ERR: error parsing query: found than, expected ; at line 1, char 86
  3. > SELECT "level description" FROM "h2o_feet" WHERE "level description" = "at or greater than 9 feet"
  4. > SELECT "level description" FROM "h2o_feet" WHERE "level description" = 'at or greater than 9 feet'
  5. name: h2o_feet
  6. --------------
  7. time level description
  8. 2015-08-26T04:00:00Z at or greater than 9 feet
  9. [...]
  10. 2015-09-15T22:42:00Z at or greater than 9 feet


InfluxDB® is a trademark registered by InfluxData, which is not affiliated with, and does not endorse, TSDB for InfluxDB®.