文档文档

InfluxQL 数学运算符

使用 InfluxQL 数学运算符在 InfluxQL 查询中执行数学运算。数学运算符遵循标准运算顺序。括号的优先级高于除法和乘法,除法和乘法的优先级高于加法和减法。例如 5 / 2 + 3 * 2 = (5 / 2) + (3 * 2)5 + 2 * 3 - 2 = 5 + (2 * 3) - 2

加法

将两个数字操作数相加。操作数可以是标识符、常量或字面数字值。

SELECT A + 5 FROM example

SELECT A + B FROM example

SELECT * FROM example WHERE A + 5 > 10

SELECT * FROM example WHERE A + B > 10

减法

将一个数字操作数从另一个操作数中减去。操作数可以是标识符、常量或字面数字值。

SELECT 1 - A FROM example

SELECT B - A FROM example

SELECT * FROM example WHERE 1 - A <= 3

SELECT * FROM example WHERE B - A <= 3

乘法

将两个数字操作数相乘。操作数可以是标识符、常量或字面数字值。

SELECT A * 10 FROM example

SELECT A * B FROM example

SELECT * FROM example WHERE A * 10 >= 20

SELECT * FROM example WHERE A * B >= 20

乘法会分配到其他运算符。

SELECT 10 * (A + B + C) FROM example

SELECT 10 * (A - B - C) FROM example

SELECT 10 * (A + B - C) FROM example

除法

用一个数字操作数除以另一个操作数。操作数可以是标识符、常量或字面数字值。

SELECT A / 10 FROM example

SELECT A / B FROM example

SELECT * FROM example WHERE A / 10 <= 2

SELECT * FROM example WHERE A / B <= 2

除法会分配到其他运算符。

SELECT 10 / (A + B + C) FROM example

SELECT 10 / (A - B - C) FROM example

SELECT 10 / (A + B - C) FROM example

对两个数字操作数执行模运算。操作数可以是标识符、常量或字面数字值。

SELECT A % 2 FROM example

SELECT A % B FROM example

SELECT A FROM example WHERE A % 2 = 0

SELECT A, B FROM example WHERE A % B = 0

按位与

相同类型的两个操作数执行按位 AND 操作。支持的类型是整数布尔值。操作数可以是标识符、常量、字面整数值或字面布尔值。

SELECT A & 255 FROM example

SELECT A & B FROM example

SELECT (A ^ true) & B FROM example

SELECT * FROM example WHERE A & 15 > 0

按位或

相同类型的两个操作数执行按位 OR 操作。支持的类型是整数布尔值。操作数可以是标识符、常量、字面整数值或字面布尔值。

SELECT A | 5 FROM example

SELECT A | B FROM example

SELECT * FROM example WHERE "bitfield" | 12 = 12

按位异或

相同类型的两个操作数执行按位 Exclusive-OR 操作。支持的类型是整数布尔值。操作数可以是标识符、常量、字面整数值或字面布尔值。

SELECT A ^ 255 FROM example

SELECT A ^ B FROM example

SELECT * FROM example WHERE "bitfield" ^ 6 > 0

不支持的运算符

不等式

SELECT 语句中使用 =!=<><=>=<> 中的任何一个,对于所有类型都会产生空结果。比较运算符只能在 WHERE 子句中使用。

逻辑运算符

使用 !|NANDXORNOR 中的任何一个都会导致解析器错误。

此外,在查询的 SELECT 子句中使用 ANDOR 不会像数学运算符那样工作,只会产生空结果,因为它们是 InfluxQL 令牌。但是,您可以将按位运算符 &|^ 应用于布尔值。

按位非

没有按位非运算符,因为您期望的结果取决于您的位字段的宽度。InfluxQL 不知道您的位字段有多宽,因此无法实现合适的按位非运算符。

例如,如果您的位字段是 8 位宽,则整数 1 代表位 0000 0001。它的按位非应该返回位 1111 1110(即整数 254)。但是,如果您的位字段是 16 位宽,则整数 1 代表位 0000 0000 0000 0001。它的按位非应该返回位 1111 1111 1111 1110(即整数 65534)。

解决方案

您可以通过使用 ^(按位异或)运算符以及表示您字宽的全 1 值的数字来实现按位非操作。

对于 8 位数据

SELECT A ^ 255 FROM example

对于 16 位数据

SELECT A ^ 65535 FROM example

对于 32 位数据

SELECT A ^ 4294967295 FROM example

在每种情况下,您需要的常量都可以计算为 (2 ** width) - 1

数学运算符的注意事项

带有通配符和正则表达式的数学运算符

InfluxQL 不支持在 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

带有函数的数学运算符

InfluxQL 不支持函数调用内的数学运算符。请注意,InfluxQL 仅允许在 SELECT 子句中使用函数。

例如,以下代码将正常工作

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

但是,以下查询将返回解析错误

SELECT mean(10 * "value") FROM "cpu"
-- Error: expected field argument in mean()

InfluxQL 支持子查询,它提供与在函数调用中使用数学运算符类似的功能。


此页面是否有帮助?

感谢您的反馈!


InfluxDB 3.8 新特性

InfluxDB 3.8 和 InfluxDB 3 Explorer 1.6 的主要增强功能。

查看博客文章

InfluxDB 3.8 现已适用于 Core 和 Enterprise 版本,同时发布了 InfluxDB 3 Explorer UI 的 1.6 版本。本次发布着重于操作成熟度,以及如何更轻松地部署、管理和可靠地运行 InfluxDB。

更多信息,请查看

InfluxDB Docker 的 latest 标签将指向 InfluxDB 3 Core

在 **2026 年 2 月 3 日**,InfluxDB Docker 镜像的 latest 标签将指向 InfluxDB 3 Core。为避免意外升级,请在您的 Docker 部署中使用特定的版本标签。

如果使用 Docker 来安装和运行 InfluxDB,latest 标签将指向 InfluxDB 3 Core。为避免意外升级,请在您的 Docker 部署中使用特定的版本标签。例如,如果使用 Docker 运行 InfluxDB v2,请将 latest 版本标签替换为 Docker pull 命令中的特定版本标签 — 例如

docker pull influxdb:2