数学函数(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 |+——+———–+ |