# 数值函数

# plus

计算两个值 ab 的和。

plus(a, b)

可以将整数和日期或带时间的日期相加。前一种操作会增加日期中的天数,后一种操作会增加带时间的日期中的秒数。

别名

a + b (运算符)

# minus

计算两个值 ab 的差。结果始终带有符号。

plus 类似,可以从日期或带时间的日期中减去整数。

minus(a, b)

别名

a - b (运算符)

# multiply

计算两个值 ab 的乘积。

multiply(a, b)

别名:

a * b (运算符)

# divide

计算两个值 ab 的商。结果类型始终为 Float64 (opens new window)。整数除法由 intDiv 函数提供。

divide(a, b)

除以 0 的结果为 infinfnan

别名

a / b (运算符)

# exp

返回给定参数的 e 的幂。

exp(x)

# log2

返回参数的二进制对数。

log2(x)

# log10

返回参数的十进制对数。

log10(x)

# cos

返回参数的余弦值。

cos(x)

# tan

返回参数的正切值。

tan(x)

# sin

返回参数的正弦值。

sin(x)

# sqrt

返回参数的平方根。

sqrt(x)

# abs

计算 a 的绝对值。如果 a 是无符号类型,则没有影响。如果 a 是有符号类型,则返回一个无符号数。

abs(a)

# floor

返回小于或等于 x 的最大整数。一个整数是 1 / 10N 的倍数,或者是适当数据类型的最近的数,如果 1 / 10N 不是精确的。‘N’ 是一个整数常量,可选参数。默认值为零,表示四舍五入到整数。‘N’ 可以是负数。

floor(x[, N])

x 是任何数值类型。结果是相同类型的数值。对于整数参数,使用负的 N 值进行四舍五入是有意义的(对于非负的 N,函数不做任何操作)。如果四舍五入导致溢出(例如,floor(-128, -1)),则返回一个与实现相关的结果。

示例

floor(123.45, 1) = 123.4, floor(123.45, -1) = 120

# ceil

返回大于或等于 x 的最小整数。在其他方面,它与 floor 函数相同(参见上文)。

# round

将一个值四舍五入到指定的小数位数。该函数返回指定顺序的最接近的数。如果给定的数与周围的数距离相等,则对于浮点数类型,函数使用银行家舍入法,对于其他数值类型(Decimal),则向远离零的方向四舍五入。

round(expression [, decimal_places])

参数

  • expression — 要四舍五入的数。可以是返回数值数据类型的任何表达式。
  • decimal-places — 整数值。
    • 如果 decimal-places > 0,则函数将值四舍五入到小数点右侧。
    • 如果 decimal-places < 0,则函数将值四舍五入到小数点左侧。
    • 如果 decimal-places = 0,则函数将值四舍五入到整数。在这种情况下,可以省略该参数。

返回值

与输入数值相同类型的四舍五入数。

示例

  • 使用 Float 类型

    SELECT number / 2 AS x, round(x) FROM system.numbers LIMIT 3
    
    ┌───x─┬─round(divide(number, 2))─┐
    │   00 │
    │ 0.50 │
    │   11 │
    └─────┴──────────────────────────┘
    
  • 使用 Decimal 类型

    SELECT cast(number / 2 AS Decimal(10,4)) AS x, round(x) FROM system.numbers LIMIT 3
    
    ┌───x─┬─round(CAST(divide(number, 2), 'Decimal(10, 4)'))─┐
    │   00 │
    │ 0.51 │
    │   11 │
    └─────┴──────────────────────────────────────────────────┘
    
  • 四舍五入到最接近的数

    round(3.2, 0) = 3
    round(4.1267, 2) = 4.13
    round(22,-1) = 20
    round(467,-2) = 500
    round(-467,-2) = -500
    
  • 银行家舍入法

    round(3.5) = 4
    round(4.5) = 4
    round(3.55, 1) = 3.6
    round(3.65, 1) = 3.6
    

# rand32

返回一个均匀分布在所有可能的 UInt32 数字范围内的随机 UInt32 数字。使用线性同余生成器。

# randNormal

返回从正态分布 (opens new window)中抽取的随机 Float64 数字。

randNormal(mean, variance)

参数

  • mean - Float64 - 分布的均值,
  • variance - Float64 - 分布的方差。

返回值

  • 随机数。
  • 类型:Float64。

示例

SELECT randNormal(10, 2) FROM numbers(5)
┌──randNormal(10, 2)─┐
│ 13.389228911709653 │
│ 8.622949707401295  │
│ 10.801887062682981 │
│ 4.5220192605895315 │
│ 10.901239123982567 │
└────────────────────┘