You need to enable JavaScript to run this app.
导航
算数函数
最近更新时间:2024.11.06 13:58:48首次发布时间:2022.02.28 12:33:06

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

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                                   │
└───────────────┴────────────────────────┴─────────────────────────────────┴──────────────────────────────────────────┘

算术函数适用于UInt8,UInt16,UInt32,UInt64,Int8,Int16,Int32,Int64,Float32或Float64中的任何类型。
溢出的产生方式与C++相同。

plus

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

select plus(a, b) -- a + b operator

参数

  • a – 数字.
  • b – 数字.

返回值

  • 返回 数值之间的和.

示例

select plus(1,2);

结果

┌─plus(1, 2)─┐
│ 3          │
└────────────┘

minus

计算数值之间的差,结果总是有符号的。您还可以将Date或DateTime与整数进行相减。见上面的’plus’。
语法

minus(a, b) -- a-b operator 

参数

  • a – 数字.
  • b – 数字.

返回值

  • 返回 数值之间的差.

示例

SELECT minus(10, 3);

结果

┌─minus(10, 3)─┐
│ 7            │
└──────────────┘

multiply

计算数值的乘积。
语法

multiply(a, b) -- a * b operator 

参数

  • a – 数字.
  • b – 数字.

返回值

  • 返回 数值的乘积.

示例

SELECT multiply(3,12);

结果

┌─multiply(3, 12)─┐
│ 36              │
└─────────────────┘

divide

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

divide(a, b) -- a / b operator

参数

  • a – 数字.
  • b – 数字.

返回值

  • 返回 浮点类型.

示例

SELECT divide(50, 2);

结果

┌─divide(50, 2)─┐
│ 2.5e+01       │
└───────────────┘

intDiv

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

intDiv(a, b)

参数

  • a – 数字.
  • b – 数字.

返回值

  • 返回数值的商.

示例

SELECT intDiv(10, 2);

结果

┌─intDiv(10, 2)─┐
│ 5             │
└───────────────┘

intDivOrZero

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

intDivOrZero(a, b)

参数

  • a – 数字.
  • b – 数字.

返回值

  • 返回数值的商.

示例

SELECT intDivOrZero(10, -2);

结果

┌─intDivOrZero(10, -2)─┐
│ -5                   │
└──────────────────────┘

modulo

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

modulo(a, b) --a % b operator

参数

  • a – 数字.
  • b – 数字.

返回值

  • 返回 相除后的余数.

示例

SELECT modulo(10, 3);

结果

┌─modulo(10, 3)─┐
│ 1             │
└───────────────┘

moduloOrZero

和modulo不同之处在于,除以0时结果返回0
语法

moduloOrZero(a, b) --a % b operator

参数

  • a – 数字.
  • b – 数字.

返回值

  • 返回 相除后的余数.

示例

SELECT moduloOrZero(10, 0);

结果

┌─moduloOrZero(10, 0)─┐
│ 0             │
└───────────────┘

negate

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

negate(a) -- -a operator

参数

  • x – 数字.

返回值

  • 返回该数的相反数

示例

SELECT negate(20);

结果

┌─negate(20)─┐
│ -20        │
└────────────┘

abs

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

abs(x)

参数

  • x – 数字.

返回值

  • 返回该数字的绝对值.

示例

SELECT abs(-2);

结果

┌─abs(-2)─┐
│ 2       │
└─────────┘

gcd

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

gcd(a, b)

参数

  • a – 数字.
  • b – 数字.

返回值

  • 返回数值的最大公约数.

示例

SELECT gcd(27,18);

结果

┌─gcd(27, 18)─┐
│ 9           │
└─────────────┘

lcm

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

lcm(a, b)

参数

  • a – 数字.
  • b – 数字.

返回值

  • 返回数值的最小公倍数.

示例

SELECT lcm(27,18);

结果

┌─lcm(27, 18)─┐
│ 54          │
└─────────────┘

max2

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

max2(value1, value2)

参数

  • value1 — 第一个值,类型为Int/UInt或Float。
  • value2 — 第二个值,类型为Int/UInt或Float。

返回值

  • 两个值中的最大值。

类型: Float。
示例
查询语句:

SELECT max2(-1, 2);

结果:

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

min2

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

min2(value1, value2)

参数

  • value1 — 第一个值,类型为Int/UInt or Float。
  • value2 — 第二个值,类型为Int/UInt or Float。

返回值

  • 两个值中的最小值。

类型: Float。
示例
查询语句:

SELECT min2(-1, 2);

结果:

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