日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

InfluxQL數學運算符

更新時間:

數學運算符遵循標準的運算順序。也就是說,括號優先于除法和乘法,除法和乘法優先于加法和減法。

數學運算符

加法

與常數相加。

SELECT "A" + 5 FROM "add"
SELECT * FROM "add" WHERE "A" + 5 > 10

兩個field相加。

SELECT "A" + "B" FROM "add"
SELECT * FROM "add" WHERE "A" + "B" >= 10

減法

與常數相減。

SELECT 1 - "A" FROM "sub"
SELECT * FROM "sub" WHERE 1 - "A" <= 3

兩個field相減。

SELECT "A" - "B" FROM "sub"
SELECT * FROM "sub" WHERE "A" - "B" <= 1

乘法

與常數相乘。

SELECT 10 * "A" FROM "mult"
SELECT * FROM "mult" WHERE "A" * 10 >= 20

兩個field相乘。

SELECT "A" * "B" * "C" FROM "mult"
SELECT * FROM "mult" WHERE "A" * "B" <= 80

乘法分布在其它運算符上。

SELECT 10 * ("A" + "B" + "C") FROM "mult"
SELECT 10 * ("A" - "B" - "C") FROM "mult"
SELECT 10 * ("A" + "B" - "C") FROM "mult"

除法

與常數相除。

SELECT 10 / "A" FROM "div"
SELECT * FROM "div" WHERE "A" / 10 <= 2

兩個field相除。

SELECT "A" / "B" FROM "div"
SELECT * FROM "div" WHERE "A" / "B" >= 10

除法分布在其它運算符上

SELECT 10 / ("A" + "B" + "C") FROM "div"

與常數進行模運算。

SELECT "B" % 2 FROM "modulo"
SELECT "B" FROM "modulo" WHERE "B" % 2 = 0

對兩個field進行模運算。

SELECT "A" % "B" FROM "modulo"
SELECT "A" FROM "modulo" WHERE "A" % "B" = 0

按位AND

您可以將這個運算符與任何整數或布爾值一起使用,無論它們是field還是常數。這個運算符不適用于浮點數或字符串,并且您也不能將整數和布爾值混合在一起計算。

SELECT "A" & 255 FROM "bitfields"
SELECT "A" & "B" FROM "bitfields"
SELECT * FROM "data" WHERE "bitfield" & 15 > 0
SELECT "A" & "B" FROM "booleans"
SELECT ("A" ^ true) & "B" FROM "booleans"

按位OR

您可以將這個運算符與任何整數或布爾值一起使用,無論它們是field還是常數。這個運算符不適用于浮點數或字符串,并且您也不能將整數和布爾值混合在一起計算。

SELECT "A" | 5 FROM "bitfields"
SELECT "A" | "B" FROM "bitfields"
SELECT * FROM "data" WHERE "bitfield" | 12 = 12

按位異或

您可以將這個運算符與任何整數或布爾值一起使用,無論它們是field還是常數。這個運算符不適用于浮點數或字符串,并且您也不能將整數和布爾值混合在一起計算。

SELECT "A" ^ 255 FROM "bitfields"
SELECT "A" ^ "B" FROM "bitfields"
SELECT * FROM "data" WHERE "bitfield" ^ 6 > 0

數學運算符的常見問題

問題一:數學運算符與通配符或正則表達式同時使用

TSDB For InfluxDB?不支持在SELECT子句中將數學運算與通配符(*)或正則表達式結合使用。以下查詢是無效的,系統會返回錯誤:

對通配符執行數學運算

> SELECT * + 2 FROM "nope"
ERR: unsupported expression with wildcard: * + 2

對函數中的通配符執行數學運算

> SELECT COUNT(*) / 2 FROM "nope"
ERR: unsupported expression with wildcard: count(*) / 2

對正則表達式執行數學運算

> SELECT /A/ + 2 FROM "nope"
ERR: error parsing query: found +, expected FROM at line 1, char 12

對函數中的正則表達式執行數學運算

> SELECT COUNT(/A/) + 2 FROM "nope"
ERR: unsupported expression with regex field: count(/A/) + 2

問題二:數學運算符與函數同時使用

目前不支持在函數內使用數學運算。請注意,TSDB For InfluxDB?只允許在SELECT子句中使用函數。

例如

SELECT 10 * mean("value") FROM "cpu"

語句沒有問題,但會產生一個解析錯誤。

SELECT mean(10 * "value") FROM "cpu"
說明

InfluxQL支持子查詢,它提供與在函數內使用數學運算符類似的功能。請查閱數據探索相關章節獲得更多信息。

不支持的運算符

等式和不等式

對所有類型的數據,在SELECT子句中使用=、!=、<><=>=<>會返回空的結果。

邏輯運算符

使用!|、NAND、XORNOR會產生解析錯誤。

另外,在查詢的SELECT子句中使用AND或者OR并不會跟使用數學運算符的效果一樣,只會產生空的結果,因為ANDOR都是InfluxQL中的標記(tokens)。但是,您可以對布爾類型的數據使用按位操作符:&、|^

Bitwise Not

沒有bitwise not運算符,因為您期望的結果依賴您的bitfield的寬度。InfluxQL不知道您的bitfield的寬度,所以無法實現一個合適的bitwise not運算符。

例如,如果您的bitfield的寬是8比特(bit),那么整數1表示比特0000 0001,bitwise-not操作后應該返回比特1111 1110,也就是整數254。

但是,如果您的bitfield的寬是16比特(bit),那么整數1表示比特0000 0000 0000 0001,bitwise-not操作后應該返回比特1111 1111 1111 1110,也就是整數65534。

解決方法

您可以通過使用^(bitwise xor)運算符和全部比特位都為1的數字(比特1的個數等于您的bitfield的寬度)來實現bitwise not運算:

對于8比特的數據(8-bit data):

SELECT "A" ^ 255 FROM "data"

對于16比特的數據(16-bit data):

SELECT "A" ^ 65535 FROM "data"

對于32比特的數據(32-bit data):

SELECT "A" ^ 4294967295 FROM "data"

在每種情況下,您需要的常數可以這樣計算:(2 ** width) - 1,即2的“width”次方減去1。

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