腾讯云数据仓库 TCHouse-X 数学函数

数学函数(Arithmetic Functions)用于执行比基础加减乘除更复杂的数值计算。TCHouse-X 提供了丰富的函数库,涵盖三角学、对数、指数、进制转换及统计分桶等操作。

相关产品
腾讯云数据仓库 TCHouse-X 产品页,含版本规格、价格与购买入口。

注意:说明:

注意:适用版本:TCHouse-X 内核版本 2.0.0及以上版本。

一、基础算术与算术扩展

函数 返回类型 说明 示例
abs(x) 与 x 相同 返回 x 的绝对值。 select abs(-10); –10
add(x, y) 与 x 相同 返回 x + y。x 与 y 类型须一致。 select add(5,2); –7
checked_add(x, y) 与 x 相同 安全加法。溢出时报错。 select checked_add(5,2); –7
subtract(x, y) 与 x 相同/Decimal 返回 x – y。x 与 y 类型须一致。 select subtract(10, 2); — 8
checked_subtract(x, y) 与 x 相同/Decimal 安全减法,在溢出时报错。 –
multiply(x, y) 与 x 相同/Decimal 返回 x * y。x 与 y 类型须一致。 select multiply(2,4); — 8
checked_multiply(x, y) 与 x 相同/Decimal 安全乘法,在溢出时报错。 –
divide(x, y) Double/Decimal 返回 x ÷ y。x 与 y 类型须一致。执行浮点除法,结果保留 6 位小数,除以零返回 NULL。 select divide(2,4); — 0.500000
checked_divide(x, y) Double/Decimal 安全除法,在溢出时报错。 –
x div y Bigint 整数除法,结果向下取整。溢出或除以零返回 NULL。 select 1 div 2; — 0select 3 div 2; — 1select -3 div 2; — -2
pmod(n, m) 与 n 相同 返回 n ÷ m 的正余数。 select pmod(-10, 3); — 2select pmod(10, 3); — 1
remainder(n, m) 与 n 相同 返回 n % m 的余数(同 Spark %)。 select remainder(-10, 3); — -1select remainder(10, 3); — 1
unaryminus(x) 与 x 相同 返回 -x。 select unaryminus(1); — -1select unaryminus(-1); — 1select unaryminus(0); — 0

二、数值修约与比较函数

函数 返回类型 说明 示例
ceil(x) 与 x 相同 向上取整。支持 Bigint, Double, Decimal。 select ceil(1.23); –2
floor(x) 与 x 相同 向下取整。支持 Bigint, Double, Decimal。 select floor(1.23); –1
round(x, d) 与 x 相同 四舍五入到 d 位(使用 HALF_UP 模式)。 select round(1.2345,2); –1.23
rint(x) Double 返回最接近 x 的整数(双精度)。 select rint(12.34); –12select rint(12.54); –13
greatest(x, …) 与 x 相同 返回参数列表中的最大值,忽略 NULL。 select greatest(1, 5, 2); –5
least(x, …) 与 x 相同 返回参数列表中的最小值,忽略 NULL。 select least(1, 5, 2); –1
sign(x) / signum Double 返回符号:正数 1,负数 -1,零 0。 select sign(100);– 1select sign(-100);– -1select sign(0);– 0

三、指数、对数与幂运算

函数 返回类型 说明 示例
e() Double 返回欧拉常数 e。 select e(); –2.7182818284590451
exp(x) Double 返回欧拉常数e 的 x次幂。 select exp(1); –2.7182818284590451select exp(2); –7.38905609893065
expm1(x) Double 返回e^x – 1。在 x 接近 0 时比 exp(x)-1 更精确。 select expm1(1); –1.7182818284590451
ln(x) / log(x) Double 返回 x 的自然对数(以 e 为底)。 select log(e()); –1select ln(e()); –1
log(base, x) Double 返回以 base 为底的 x 的对数。 select log(2, 8); –3
log10(x) Double 返回以 10 为底的对数。 select log10(100); –2
log2(x) Double 返回以 2 为底的对数。 select log2(8); –3
log1p(x) Double 返回 ln(x + 1)。 select log1p(0); –0
pow(x, p) Double 返回 x 的 p 次幂。 select pow(2, 3); –8
sqrt(x) Double 返回 x 的平方根。 select sqrt(9); –3
cbrt(x) Double 返回 x 的立方根。 select cbrt(8);–2
factorial(x) Bigint 返回 x 的阶乘(x 须在 0-20 之间)。 select factorial(5); –120

四、三角函数

函数 返回类型 说明 示例
sin(x) Double 返回 x(弧度)的正弦值。 SELECT sin(PI()/2); — 结果:1 (90°的正弦)
cos(x) Double 返回 x(弧度)的余弦值。 SELECT cos(PI()); — 结果:-1 (180°的余弦)
tan(x) Double 返回 x(弧度)的正切值。 SELECT tan(PI() / 4); — 预期 1.0,实际返回 0.99999999999999989(浮点精度误差,非 bug)
asin(x) Double 返回 x(弧度)的反正弦值。 SELECT asin(1.0); –1.57079… (π/2)
acos(x) Double 返回 x(弧度)的反余弦值。 SELECT acos(-1.0); –3.14159… (π)
atan(x) Double 返回 x(弧度)的反正切值。 SELECT atan(1.0); –0.78539… (π/4)
sinh(x) Double 返回 x(弧度)的双曲正弦 。 SELECT sinh(1.0); –1.1752…
cosh(x) Double 返回 x(弧度)的双曲余弦。 SELECT cosh(0); –1
tanh(x) Double 返回 x(弧度)的双曲正切值。 SELECT tanh(0.5); –0.4621…
asinh(x) Double 返回 x(弧度)的反双曲正弦值。 SELECT asinh(1.0); –0.8813…
acosh(x) Double 返回 x(弧度)的反双曲余弦值。 SELECT acosh(1.0); –0
atanh(x) Double 返回 x(弧度)的反双曲正切值。 SELECT atanh(0.5); –0.5493…
cot(x) Double 返回 x(弧度)的余切值。 SELECT cot(PI() / 4); — 预期结果 1.0,实际返回 1.0000000000000002(浮点精度误差,非 bug)
csc(x) Double 返回 x(弧度)的余割值。 SELECT csc(PI()/2);–1 (余割,1/sin)
sec(x) Double 返回 x(弧度)的正割值。 SELECT sec(0); — 结果:1.0 (正割,1/cos)
atan2(y, x) Double 返回 y/x 的反正切值。兼容 Spark 极端情况。 SELECT atan2(1, 1); –0.78539… (坐标 (1,1) 的极角)
degrees(x) Double 将弧度转换为角度。 SELECT degrees(PI()); — 180
radians(x) Double 将角度转换为弧度。 SELECT radians(180); –3.14159…(π)
hypot(a, b) Double 返回sqrt(a^2 + b^2) 的值。 SELECT hypot(3, 4); –5

五、进制转换与位操作

函数 返回类型 说明 示例
bin(x) Varchar 返回 Long 类型 x 的二进制字符串。 SELECT bin(10); –'1010'
hex(x) Varchar 返回 x 的十六进制字符串。支持数字、字符串和二进制。 SELECT hex(255); –'FF'
unhex(x) Varbinary 将十六进制字符串转回二进制。匹配 Spark 3.5.3 行为。 SELECT hex('ABC'); –'414243'
conv(n, f, t) Varchar 将数字从 f 进制转换为 t 进制。 SELECT conv('1010', 2, 10); –'10'SELECT conv('FF', 16, 2); –'11111111'
unscaled_value(x) Bigint 返回短小数(Short Decimal)的原始 Bigint 值。 SELECT unscaled_value(CAST(12.34 AS DECIMAL(10, 2))); –1234

六、其他特殊函数

函数 返回类型 说明 示例
isnan(x) Boolean 检查 x 是否为 NaN。支持 Float/Double。 SELECT isnan(cast('nan' as double)); — 1
rand([seed]) /random([seed]) Double 返回 [0, 1) 范围内的随机数。指定 seed 可获得确定性结果。 SELECT rand(); — 结果随机SELECT rand(123); — 结果固定
not(x) Boolean not true 返回 false SELECT not(1 = 1); –0
width_bucket(x, b1, b2, n) Bigint 将 x 分配到从 b1 到 b2 划分为 n 个等宽桶中的桶编号。 SELECT val, width_bucket(val, 0, 100, 4) as bucket_idFROM ( VALUES (-5), (20), (50), (90), (110) ) AS t(val);+——+———–+| val | bucket_id |+——+———–+| -5 | 0 || 20 | 1 || 50 | 3 || 90 | 4 || 110 | 5 |+——+———–+
赞 (0)
上一篇 4天前
下一篇 4天前