Skip to main content

概述

算术函数适用于任意两个类型为 UInt8、UInt16、UInt32、UInt64、Int8、Int16、Int32、Int64、Float32 或 Float64 的操作数。 在执行运算之前,两个操作数都会转换为结果类型。结果类型按如下方式确定 (除非下文的函数文档中 另有说明) :
  • 如果两个操作数都不超过 32 位宽,则结果类型的大小将取两者中较大操作数所对应类型之后的下一个更大类型 (整数类型提升) 。例如,UInt8 + UInt16 = UInt32 或 Float32 * Float32 = Float64。
  • 如果其中一个操作数为 64 位或更宽,则结果类型的大小与两个操作数中较大的那个相同。例 如,UInt32 + UInt128 = UInt128 或 Float32 * Float64 = Float64。
  • 如果其中一个操作数是有符号类型,则结果类型也将是有符号类型;否则为无符号类型。例如,UInt32 * Int32 = Int64 或 UInt32 * UInt32 = UInt64。
这些规则可确保结果类型是能够表示所有可能结果的最小类型。虽然这会在数值范围边界附近引入 溢出的风险,但也能确保计算充分利用 64 位原生整数的最大位宽,以更快的速度执行。这种行为还可保证与许多将 64 位整数 (BIGINT) 作为最大整数类型的其他数据库兼容。 示例:
溢出的情况与 C++ 中相同。

abs

引入版本:v1.1.0 计算 x 的绝对值。如果 x 是无符号类型,则不会产生任何影响。如果 x 是有符号类型,则返回无符号数。 语法
参数
  • x — 需要求绝对值的值
返回值 x 的绝对值 示例 使用示例
Query
Response

avg2

引入版本:v25.11.0 计算并返回所提供参数的平均值。 支持数值类型和时间类型。 语法
参数
  • x1, x2] — 接受两个用于计算平均值的参数。
返回值 返回所提供参数的平均值,并将结果提升为兼容的最大类型。 示例 数值类型
Query
Response
Decimal 类型
Query
Response
日期类型
Query
Response
DateTime 类型
Query
Response
Time64 类型
Query
Response

byteSwap

引入版本:v23.10.0 将整数的字节顺序反转,即改变其字节序。 下面的示例可按以下方式理解:
  1. 将十进制整数转换为对应的大端十六进制格式,即 3351772109 -> C7 C7 FB CD (4 字节)
  2. 将字节顺序反转,即 C7 C7 FB CD -> CD FB C7 C7
  3. 假定结果为大端格式,将其转换回整数,即 CD FB C7 C7 -> 3455829959 该函数的一个用例是反转 IPv4:
语法
参数 返回值 返回字节顺序颠倒后的 x。(U)Int* 示例 使用示例
Query
Response
8 位
Query
Response
16 位
Query
Response
32 位
Query
Response
64 位
Query
Response

divide

引入版本:v1.1.0 计算两个值 a 和 b 的商。结果类型始终为 Float64。 整数除法请使用 intDiv 函数。
除数为 0 时,会返回 inf、-inf 或 nan。
语法
参数
  • x — 被除数;y — 除数
返回值 x 与 y 的商 示例 两个数相除
Query
Response
除以零
Query
Response

divideDecimal

Introduced in: v22.12.0 对两个 Decimal 执行除法运算。结果值的类型为 Decimal256。 结果标度可通过 result_scale 参数 (取值范围为 [0, 76] 的常量 Integer) 显式指定。若未指定,则结果标度为给定参数中的最大标度。
此函数的执行速度明显慢于常规的 divide。 如果你并不需要受控精度和/或需要更快的计算速度,请考虑使用 divide。
语法
参数
  • x — 第一个值:Decimal。 - y — 第二个值:Decimal。 - result_scale — 结果标度。类型:Int/UInt。
返回值 按给定标度得到的除法结果。Decimal256 示例 示例 1
Query
Response
示例 2
Query
Response

divideOrNull

在 v25.5.0 中引入 与 divide 相同,但在除数为零时返回 NULL。 语法
参数
  • x — 被除数 - y — 除数
返回值 x 与 y 的商,或 NULL。 示例 除以零
Query
Response

gcd

引入版本:v1.1.0 返回两个值 a 和 b 的最大公约数。 当除数为零,或将最小负数除以负一时, 会抛出异常。 语法
参数
  • x — 第一个整数 - y — 第二个整数
返回值 x 和 y 的最大公因数。 示例 使用示例
Query
Response

ifNotFinite

Introduced in: v20.3.0 检查浮点值是否为有限值。 你也可以使用三元运算符获得类似的结果:isFinite(x) ? x : y。 语法
参数
  • x — 要检查是否为无穷大的值。Float*
  • y — 备用值。Float*
返回值
  • 如果 x 是有限值,则返回 x。
  • 如果 x 不是有限值,则返回 y。
示例 用法示例
Query
Response

intDiv

Introduced in: v1.1.0 对两个值 x 和 y 执行整数除法。也就是说, 计算向下取整后的商。 结果与被除数 (第一个参数) 的位宽相同。 当除以零、商超出被除数的取值范围,或将最小负数除以负一时, 会抛出异常。 语法
参数
  • x — 左操作数。- y — 右操作数。
返回值 x 与 y 整数相除的结果 示例 两个浮点数的整数除法
Query
Response
商不在被除数的取值范围内
Query
Response

intDivOrNull

引入版本:v25.5.0 与 intDiv 相同,但在除数为零或将最小负数除以负一时返回 NULL。 语法
参数 返回值 x 与 y 做整数除法的结果,或 NULL。 示例 被零除的整数除法
Query
Response
最小负数除以 -1
Query
Response

intDivOrZero

引入版本:v1.1.0 与 intDiv 相同,但在除数为零,或将最小负数除以负一时返回零。 语法
参数 返回值 a 与 b 做整数除法的结果,或为零。 示例 整数除以零
Query
Response
最小负数除以 -1
Query
Response

isFinite

引入版本:v1.1.0 如果 Float32、Float64 或 BFloat16 参数既不是无穷大也不是 NaN,则返回 1, 否则返回 0。 语法
参数 返回值 如果 x 不是无穷大且不是 NaN,则返回 1;否则返回 0。 示例 测试一个数是否为有限值
Query
Response

isInfinite

Introduced in: v1.1.0 如果 Float32、Float64 或 BFloat16 参数是无穷大,则返回 1;否则返回 0。 请注意,参数为 NaN 时也会返回 0。 语法
参数 返回值 若 x 为无穷大,则返回 1;否则返回 0 (NaN 也返回 0) 。 示例 判断一个数值是否为无穷大
Query
Response

isNaN

引入版本:v1.1.0 如果 Float32、Float64 或 BFloat16 类型的参数为 NaN,则返回 1,否则返回 0。 语法
参数 返回值 如果为 NaN,则返回 1;否则返回 0 示例 使用示例
Query
Response

kqlBin

引入版本:v26.8.0 将值向下取整为 roundTo 的倍数,行为与 Kusto 查询语言的 bin() 相同。 具体规则取决于参数类型:数字按算术方式取整,时间跨度 (即 Interval) 按 时间跨度 取整,日期时间 同样按 时间跨度 取整。KQL 的 日期时间 对应 DateTime64;范围更窄的 DateTime 和 Date 载体会被拒绝,因为它们无法表示 KQL 日期时间 可能产生的所有 分桶。 当 dialect = 'kusto' 时,该函数为 bin() 提供底层实现,不适合在 SQL 中直接调用。 语法
Arguments
  • value — 数字、时间跨度 或日期时间 (DateTime64) 。 - roundTo — 分桶 的大小。
Returned value value 向下取整到 roundTo 的最近倍数。 Examples number
Query
Response
时间跨度
Query
Response
日期时间
Query
Response

kqlBinAt

Introduced in: v26.8.0 将值向下取整为从 fixedPoint 起算的 binSize 的整数倍,行为与 Kusto 查询语言的 bin_at() 相同。分桶的对齐位置可能位于该固定点之前或之后。 具体规则取决于参数类型:数字按算术方式舍入;时间跨度 (即 Interval) 按另一个时间跨度 舍入;日期时间 则按从某个日期时间 固定点起算的时间跨度 舍入。KQL 的 日期时间 对应 DateTime64;范围更窄的 DateTime 和 Date 载体会被拒绝,因为它们无法表示 KQL 日期时间 可能产生的所有分桶。 该函数在 dialect = 'kusto' 时为 bin_at() 提供底层实现,不应直接在 SQL 中调用。 Syntax
Arguments
  • value — 一个数字、一个 时间跨度 或一个 日期时间 (DateTime64) 。- binSize — 分桶 大小。- fixedPoint — 分桶 的计数起点。
Returned value 以 fixedPoint 为起点,将 value 向下取整到最接近的 binSize 倍数。 Examples number
Query
Response
日期时间
Query
Response

kqlDateTimeBinAt

引入版本:v26.8.0 将日期时间向下取整为自某个日期时间固定点起计算的时间跨度整数倍。 语法
Arguments
  • value — 需要取整的日期时间。 - binSize — 时间跨度 分桶大小。 - fixedPoint — 日期时间固定点。
Returned value 取整后的日期时间。 Examples

kqlDivide

Introduced in: v26.8.0 按 Kusto 查询语言定义的除法:两个整数操作数相除结果为整数,因此 7 / 2 为 3;两个 时间跨度 操作数 (即 Interval 值) 相除则得到实数比值,因此 15ms / 10ms 为 1.5。操作数类型的其他任意组合,其除法行为与 divide 一致。 该函数在 dialect = 'kusto' 时为 / 运算符提供底层实现,不适合直接在 SQL 中调用。 Syntax
参数
  • x — 被除数。 - y — 除数。
返回值 当两个参数均为整数时,返回 intDiv(x, y);当两者均为时间间隔时,返回二者 tick 数之比;其他情况下返回 divide(x, y)。 示例 整数
Query
Response
实数
Query
Response
时间跨度 (时间跨度)
Query
Response

kqlMultiply

引入版本:v26.8.0 按 Kusto 查询语言的定义执行乘法:时间跨度 (即 Interval) 可与位于任意一侧的数字相乘进行缩放,因此 2 * 1h 表示两小时。若两个参数中都不含时间间隔,则乘法行为与 multiply 一致。 该函数用于在 dialect = 'kusto' 时实现 * 运算符,并非设计为在 SQL 中直接调用。 语法
参数
  • x — 数字或时间跨度。 - y — 数字;当 x 为数字时,也可以是时间跨度。
返回值 乘积;若其中一个参数为时间间隔,则返回同类型的时间间隔。 示例 时间跨度
Query
Response
numbers
Query
Response

kqlRangeCount

引入版本:v26.8.0 Kusto 查询语言的 range source 所生成的行数:floor((to - from) / step) + 1,且永不小于零。bounds 和 step 可以是数字,也可以是以 时间跨度 (即 Interval) 为步长递进的 日期时间,或者是 时间跨度;时间类形式按整数纳秒计数,而这无法用单次 ClickHouse 除法表达。整数和 Decimal 会被精确计数,而不经由 Float64 计算。 当 dialect = 'kusto' 时,该函数为 range source 提供底层支持,并不适合直接在 SQL 中调用。 语法
参数
  • from — 范围的起始值。- to — 范围不会超过的值。- step — 相邻两个值之间的差值。
返回值 范围内值的个数。 示例 numbers
Query
Response
日期时间
Query
Response

lcm

引入版本:v1.1.0 返回两个值 x 和 y 的最小公倍数。 当除以零,或将最小负数除以负一时,会抛出异常。 语法
参数 返回值 返回 x 和 y 的最小公倍数。(U)Int* 示例 用法示例
Query
Response

max2

引入版本:v21.11.0 返回两个数值 x 和 y 中较大的值。 语法
参数 返回值 返回 x 和 y 中的较大值。 Float64 示例 用法示例
Query
Response

midpoint

引入版本:v25.11.0 计算并返回给定参数的平均值。 支持数值类型和时间类型。 语法
参数
  • x1[, x2, ...] — 接受单个值或多个值,并对其求平均值。
返回值 返回所提供参数的平均值,结果会提升为兼容的最大类型。 示例 数值类型
Query
Response
Decimal 类型
Query
Response
日期类型
Query
Response
DateTime 类型
Query
Response
Time64 类型
Query
Response

min2

引入版本:v21.11.0 返回两个数值 x 和 y 中较小的一个。 语法
参数 返回值 返回 x 和 y 中较小的值。 Float64 示例 使用示例
Query
Response

minus

在 v1.1.0 中引入 计算两个值 a 和 b 的差值。结果始终为带符号数。 与 plus 类似,也可以用日期或日期时间减去一个整数。 此外,也支持两个日期时间相减,结果为它们之间的时间差。 还可以用 DateTime 或 DateTime64 减去 Time 或 Time64; 该时间值会作为以秒为单位的偏移量应用。DateTime 减去 Time 得到 DateTime,任何涉及 DateTime64 或 Time64 的组合都会得到 DateTime64, 其标度为两个参数中的较大值。 语法
参数
  • x — 被减数。 - y — 减数。
返回值 x 与 y 的差 示例 两个数相减
Query
Response
整数和日期相减
Query
Response

modulo

Introduced in: v1.1.0 计算两个值 a 除以 b 所得的余数。 如果两个输入都是整数,结果类型为整数。如果其中一个输入是浮点数,结果类型则为 Float64。 余数的计算方式与 C++ 相同。对于负数,使用截断除法。 当除数为零,或将最小负数除以负一时,会抛出异常。 Syntax
别名: mod 参数
  • a — 被除数 - b — 除数 (模数)
返回值 a % b 的余数 示例 使用示例
Query
Response

moduloLegacy

引入版本:v1.1.0 计算除法的余数。这是使用 C++ % 运算符的旧版取模实现,对于负参数,可能会产生负结果。保留此函数是为了兼容旧版表分区逻辑。标准行为请使用 modulo 或 positiveModulo。 语法
参数 返回值 返回相除后的余数。(U)Int* 或 Float* 示例 基本用法
Query
Response

moduloOrNull

引入版本:v25.5.0 计算 a 除以 b 的余数。与函数 modulo 类似,不同之处在于,当该运算原本会引发浮点异常时,moduloOrNull 会返回 NULL。对于浮点参数,这种情况仅会在除数为 0 时发生;对于整数参数,还包括最小负值对 -1 取模的情况 (例如 Int8 中的 -128 % -1) 。 语法
别名: modOrNull 参数 返回值 返回 x 除以 y 的余数;当该运算会引发浮点异常时,返回 NULL: 即当除数为零时,或者对于整数参数,在计算最小负值对 -1 取模时。 示例 除数为零时的 moduloOrNull
Query
Response
最小负整数除以 -1 时的 moduloOrNull
Query
Response

moduloOrZero

首次引入版本:v20.3.0 与 modulo 类似,但对于整数结果,当操作原本会引发 异常时会返回零而不是异常。对于浮点结果,零除数会产生 NaN。 语法
参数 返回值 返回 a % b 的余数。对于整数结果,如果该操作原本会引发异常,则返回 0。 对于浮点结果,除数为零时会产生 NaN。 示例 整数除数为零
Query
Response
浮点零除数
Query
Response

multiply

引入于:v1.1.0 计算两个值 x 和 y 的乘积。 语法
参数 返回值 返回 x 与 y 的乘积 示例 将两个数相乘
Query
Response

multiplyDecimal

引入版本:v22.12.0 对两个 Decimal 执行乘法。结果值的类型为 Decimal256。 结果标度可以通过 result_scale 参数 (取值范围为 [0, 76] 的常量 Integer) 显式指定。若未指定,则结果标度为给定参数中的最大标度。
这些函数的运行速度明显慢于常规的 multiply。 如果你并不需要受控精度和/或希望快速计算,请考虑使用 multiply
语法
参数 返回值 按给定标度计算出的乘法结果。类型:Decimal256 示例 使用示例
Query
Response
与普通乘法的区别
Query
Response
使用 multiplyDecimal 不会溢出
Query
Response
常规乘法中的 Decimal 溢出
Query
Response

negate

引入版本:v1.1.0 对参数 x 取反。结果始终为有符号数。 语法
参数
  • x — 要取负值的值。
返回值 返回 x 的相反数 -x。 示例 使用示例
Query
Response

plus

引入版本:v1.1.0 计算两个值 x 和 y 的和。别名:x + y (运算符) 。 整数可以与日期或日期时间相加。前一种 运算会增加日期中的天数,后一种运算 会增加日期时间中的秒数。 日期也可以与时间相加。将 Date 与 Time 相加会生成 DateTime。将 Date 与 Time64 相加,或将 Date32 与 Time 或 Time64 相加,会生成 DateTime64。 将 Time 或 Time64 与 DateTime 或 DateTime64 相加时,该时间 值会作为以秒为单位的偏移量应用。DateTime 加 Time 会生成 DateTime; 任何涉及 DateTime64 或 Time64 的组合都会生成 DateTime64, 其标度取两个参数中较大者。 语法
参数
  • x — 左操作数。 - y — 右操作数。
返回值 返回 x 与 y 的和 示例 两个数相加
Query
Response
整数与日期相加
Query
Response
添加日期和时间
Query
Response

positiveModulo

引入版本:v22.11.0 计算 x 除以 y 的余数。与函数 modulo 类似,不同之处在于 positiveModulo 始终返回非负数。 语法
别名: positive_modulo, pmod 参数 返回值 返回 x 与不大于 x 且能被 y 整除的最大整数之间的差值。 示例 用法示例
Query
Response

positiveModuloOrNull

引入版本:v25.5.0 计算 a 除以 b 的余数。与函数 positiveModulo 类似,不同之处在于,当该运算本应引发浮点异常时,positiveModuloOrNull 会返回 NULL。对于浮点参数,这种情况只会在除数为 0 时发生;对于整数参数,还包括最小负值对 -1 取模的情况 (例如 Int8 中的 -128 % -1) 。 语法
别名: positive_modulo_or_null, pmodOrNull 参数 返回值 返回 x 与不大于 x 且可被 y 整除的最近整数之差;或者当该运算会引发浮点异常时返回 NULL:即除数为零,或者对于整数参数,在计算最小负值对 -1 取模时。 示例 positiveModuloOrNull 的除数为零时
Query
Response
最小负整数对 -1 执行 positiveModuloOrNull
Query
Response

sqr

引入版本:v26.7.0 计算值 x 的平方。 语法
参数 返回值 返回 x 与其自身相乘的乘积。 示例 对数值求平方
Query
Response
最后修改于 2026年9月26日