全部產品
Search
文件中心

Time Series Database:WHERE語句

更新時間:Jul 06, 2024

WHERE子句根據field、tag和/或timestamp來過濾資料。

文法

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

文法描述

WHERE子句支援在field、tag和timestamp上的條件運算式(conditional_expression)。

field

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

WHERE子句支援對field value進行比較,field value可以是字串、布爾值、浮點數或者整數。

在WHERE子句中,請對字串類型的field value用單引號括起來。如果字串類型的field value沒有使用引號或者使用了雙引號,那麼不會返回任何查詢結果,在大多數情況下,也不會返回錯誤。支援的操作符:

操作符含義
=等於
<>不等於
!=不等於
>大於
>=大於或等於
<小於
<=小於或等於

除此之外,還支援的功能:算術運算和Regex。

tag

tag_key <operator> ['tag_value']

在WHERE子句中,請對tag value用單引號括起來。如果tag value沒有使用引號或者使用了雙引號,那麼不會返回任何查詢結果,在大多數情況下,也不會返回錯誤。支援的操作符:

操作符說明
=等於
<>不等於
!=不等於

除此之外,還支援的功能:Regex。

timestamp

對於大多數SELECT語句,預設的時間範圍是從1677-09-21 00:12:43.145224194 UTC到2262-04-11T23:47:16.854775806Z UTC。對於帶GROUP BY time()子句的SELECT語句,預設的時間範圍是從1677-09-21 00:12:43.145224194 UTC到now()。

樣本

查詢field value滿足一定條件的資料。
> SELECT * FROM "h2o_feet" WHERE "water_level" > 8
name: h2o_feet
--------------
time                   level description      location       water_level
2015-08-18T00:00:00Z   between 6 and 9 feet   coyote_creek   8.12
2015-08-18T00:06:00Z   between 6 and 9 feet   coyote_creek   8.005
[...]
2015-09-18T00:12:00Z   between 6 and 9 feet   coyote_creek   8.189
2015-09-18T00:18:00Z   between 6 and 9 feet   coyote_creek   8.084

該查詢返回h2o_feet中的資料,這些資料滿足條件:field keywater_level的值大於8。

查詢field value滿足一定條件的資料(field value是字串類型)

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

該查詢返回h2o_feet中的資料,這些資料滿足條件:field keylevel description的值等於字串below 3 feet。在WHERE子句中,需要用單引號將字串類型的field value括起來。

查詢field value滿足一定條件的資料(WHERE子句包含基本運算)

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

該查詢返回h2o_feet中的資料,這些資料滿足條件:field keywater_level的值加上2大於11.9。請注意,TSDB For InfluxDB®遵循標準的算術運算順序。可查看數學運算子章節瞭解更多相關資訊。

查詢tag value滿足一定條件的資料

> SELECT "water_level" FROM "h2o_feet" WHERE "location" = 'santa_monica'
name: h2o_feet
--------------
time                   water_level
2015-08-18T00:00:00Z   2.064
2015-08-18T00:06:00Z   2.116
[...]
2015-09-18T21:36:00Z   5.066
2015-09-18T21:42:00Z   4.938

該查詢返回h2o_feet中的資料,這些資料滿足條件:tag keylocation的值是santa_monica。在WHERE子句中,需要用單引號將字串類型的tag value括起來。

查詢field value和tag value都滿足一定條件的資料

> SELECT "water_level" FROM "h2o_feet" WHERE "location" <> 'santa_monica' AND ("water_level" < -0.59 OR "water_level" > 9.95)
name: h2o_feet
--------------
time                   water_level
2015-08-29T07:18:00Z   9.957
2015-08-29T07:24:00Z   9.964
2015-08-29T07:30:00Z   9.954
2015-08-29T14:30:00Z   -0.61
2015-08-29T14:36:00Z   -0.591
2015-08-30T15:18:00Z   -0.594

該查詢返回h2o_feet中的資料,這些資料滿足條件:tag keylocation的值不等於santa_monica,並且,field keywater_level的值小於-0.59或大於9.95。WHERE子句支援操作符AND和OR,並支援用括弧將它們的邏輯分開。

查詢timestamp滿足一定條件的資料

> 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括起來(這是支援的文法),返回了預期的結果。

> SELECT "water_level" FROM "h2o_feet" WHERE "location" = santa_monica
> SELECT "water_level" FROM "h2o_feet" WHERE "location" = "santa_monica"
> SELECT "water_level" FROM "h2o_feet" WHERE "location" = 'santa_monica'
name: h2o_feet
--------------
time                   water_level
2015-08-18T00:00:00Z   2.064
[...]
2015-09-18T21:42:00Z   4.938

下面的代碼塊中,前兩個查詢分別嘗試沒有用引號或者嘗試用雙引號來指定字串類型的field value:at or greater than 9 feet。第一個查詢返回錯誤,因為該field value包含空格。第二個查詢沒有返回任何結果。第三個查詢使用了單引號將at or greater than 9 feet括起來(這是支援的文法),返回了預期的結果。

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