ClickHouse/docs/zh/sql-reference/functions/arithmetic-functions.md
2023-08-29 15:11:28 +08:00

4.8 KiB
Raw Blame History

slug sidebar_position sidebar_label
/zh/sql-reference/functions/arithmetic-functions 35 算术函数

算术函数

对于所有算术函数,结果类型为结果适合的最小数值类型(如果存在这样的类型)。最小数值类型是根据数值的位数,是否有符号以及是否是浮点类型而同时进行的。如果没有足够的位,则采用最高位类型。

例如:

SELECT toTypeName(0), toTypeName(0 + 0), toTypeName(0 + 0 + 0), toTypeName(0 + 0 + 0 + 0)
┌─toTypeName(0)─┬─toTypeName(plus(0, 0))─┬─toTypeName(plus(plus(0, 0), 0))─┬─toTypeName(plus(plus(plus(0, 0), 0), 0))─┐
│ UInt8         │ UInt16                 │ UInt32                          │ UInt64                                   │
└───────────────┴────────────────────────┴─────────────────────────────────┴──────────────────────────────────────────┘

算术函数适用于UInt8UInt16UInt32UInt64Int8Int16Int32Int64Float32或Float64中的任何类型。

溢出的产生方式与C++相同。

plus(a, b), a + b operator

计算数值的总和。 您还可以将Date或DateTime与整数进行相加。在Date的情况下和整数相加整数意味着添加相应的天数。对于DateTime这意味着添加相应的秒数。

minus(a, b), a - b operator

计算数值之间的差,结果总是有符号的。

您还可以将Date或DateTime与整数进行相减。见上面的plus

multiply(a, b), a * b operator

计算数值的乘积。

divide(a, b), a / b operator

计算数值的商。结果类型始终是浮点类型。 它不是整数除法。对于整数除法请使用intDiv函数。 当除以零时你得到inf- infnan

intDiv(a,b)

计算数值的商,向下舍入取整(按绝对值)。 除以零或将最小负数除以-1时抛出异常。

intDivOrZero(a,b)

intDiv的不同之处在于它在除以零或将最小负数除以-1时返回零。

modulo(a, b), a % b operator

计算除法后的余数。 如果两个输入都是整数,结果类型是整数。如果其中一个输入是浮点数,则结果是浮点数。 其余部分与C++中的含义相同。截断除法用于负数。 除以零或将最小负数除以-1时抛出异常。

moduloOrZero(a, b)

modulo不同之处在于除以0时结果返回0

negate(a), -a operator

通过改变数值的符号位对数值取反,结果总是有符号的

abs(a)

计算数值a的绝对值。也就是说如果a < 0它返回-a。对于无符号类型它不执行任何操作。对于有符号整数类型它返回无符号数。

gcd(a,b)

返回数值的最大公约数。 除以零或将最小负数除以-1时抛出异常。

lcm(a,b)

返回数值的最小公倍数。 除以零或将最小负数除以-1时抛出异常。

max2

比较两个值并返回最大值。返回值转换为Float64

语法

max2(value1, value2)

参数

返回值

  • 两个值中的最大值。

类型: Float

示例

查询语句:

SELECT max2(-1, 2);

结果:

┌─max2(-1, 2)─┐
│           2 │
└─────────────┘

min2

比较两个值并返回最小值。返回值类型转换为Float64

语法

min2(value1, value2)

参数

返回值

  • 两个值中的最小值。

类型: Float

示例

查询语句:

SELECT min2(-1, 2);

结果:

┌─min2(-1, 2)─┐
│          -1 │
└─────────────┘