跳转到主要内容

概述

算术函数适用于任意两个类型为 UInt8UInt16UInt32UInt64Int8Int16Int32Int64Float32Float64 的操作数。 在执行运算之前,两个操作数都会转换为结果类型。结果类型按如下方式确定 (除非下文的函数文档中 另有说明) :
  • 如果两个操作数都不超过 32 位宽,则结果类型的大小将取两者中较大操作数所对应类型之后的下一个更大类型 (整数类型提升) 。例如,UInt8 + UInt16 = UInt32Float32 * Float32 = Float64
  • 如果其中一个操作数为 64 位或更宽,则结果类型的大小与两个操作数中较大的那个相同。例 如,UInt32 + UInt128 = UInt128Float32 * Float64 = Float64
  • 如果其中一个操作数是有符号类型,则结果类型也将是有符号类型;否则为无符号类型。例如,UInt32 * Int32 = Int64UInt32 * 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 计算两个值 ab 的商。结果类型始终为 Float64。 整数除法请使用 intDiv 函数。
除数为 0 时,会返回 inf-infnan
语法
参数
  • 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 — 第二个整数
返回值 xy 的最大公因数。 示例 使用示例
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 对两个值 xy 执行整数除法。也就是说, 计算向下取整后的商。 结果与被除数 (第一个参数) 的位宽相同。 当除以零、商超出被除数的取值范围,或将最小负数除以负一时, 会抛出异常。 语法
参数
  • x — 左操作数。- y — 右操作数。
返回值 xy 整数相除的结果 示例 两个浮点数的整数除法
Query
Response
商不在被除数的取值范围内
Query
Response

intDivOrNull

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

intDivOrZero

引入版本:v1.1.0 intDiv 相同,但在除数为零,或将最小负数除以负一时返回零。 语法
参数 返回值 ab 做整数除法的结果,或为零。 示例 整数除以零
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

lcm

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

max2

引入版本:v21.11.0 返回两个数值 xy 中较大的值。 语法
参数 返回值 返回 xy 中的较大值。 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 返回两个数值 xy 中较小的一个。 语法
参数 返回值 返回 xy 中较小的值。 Float64 示例 使用示例
Query
Response

minus

在 v1.1.0 中引入 计算两个值 ab 的差值。结果始终为带符号数。 与 plus 类似,也可以用日期或日期时间减去一个整数。 此外,也支持两个日期时间相减,结果为它们之间的时间差。 语法
参数
  • 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++ % 运算符的旧版取模实现,对于负参数,可能会产生负结果。保留此函数是为了兼容旧版表分区逻辑。标准行为请使用 modulopositiveModulo 语法
参数 返回值 返回相除后的余数。(U)Int*Float* 示例 基本用法
Query
Response

moduloOrNull

引入版本:v25.5.0 计算 a 除以 b 的余数。与函数 modulo 类似,不同之处在于当右侧参数为 0 时,moduloOrNull 会返回 NULL。 语法
别名: modOrNull 参数 返回值 返回 x 除以 y 的余数;当除数为零时,返回 NULL。 示例 除数为零时的 moduloOrNull
Query
Response

moduloOrZero

首次引入版本:v20.3.0 与 modulo 类似,但当除数为零时会返回零,而不是像 modulo 函数那样抛出异常。 语法
参数 返回值 返回 a % b 的余数;当除数为 0 时,返回 0 示例 使用示例
Query
Response

multiply

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

multiplyDecimal

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

negate

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

plus

引入版本:v1.1.0 计算两个值 xy 的和。别名:x + y (运算符) 。 整数可以与日期或日期时间相加。前一种 运算会增加日期中的天数,后一种运算 会增加日期时间中的秒数。 日期也可以与时间相加。将 DateTime 相加会生成 DateTime。将 DateTime64 相加,或将 Date32TimeTime64 相加,会生成 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 类似,不同之处在于,如果右侧参数为 0,positiveModuloOrNull 将返回 NULL。 语法
别名: positive_modulo_or_null, pmodOrNull 参数 返回值 返回 x 与不大于 x 且可被 y 整除的最大整数之差;当除数为零时,返回 null 示例 positiveModuloOrNull
Query
Response
最后修改于 2026年7月2日