数学运算符

运算符 描述
+ 相加
- 相减
* 相乘
/ 相除(整数除法执行截断运算)
% 取模(求余)

数学函数

abs(x) → [返回类型与 x 相同]

返回 x 的绝对值。

cbrt(x) → double

返回 x 的立方根。

ceil(x) → [返回类型与 x 相同]

ceiling() 函数的别名。

cosine_similarity(x, y) → double

返回稀疏向量 x 和 y 之间的余弦相似度:

1
SELECT cosine_similarity(MAP(ARRAY['a'], ARRAY[1.0]), MAP(ARRAY['a'], ARRAY[2.0])); -- 1.0

degrees(x) → double

将以弧度为单位的角度 x 转换为度。

e() → double

返回欧拉数 e

常数 e,作为数学常数,是自然对数函数的底数,亦称自然常数、自然底数,或是欧拉数(Euler’s number),以瑞士数学家欧拉命名;还有个较少见的名字纳皮尔常数,用来纪念苏格兰数学家约翰·纳皮尔引进对数。它是一个无限不循环小数(无理数),数值约是(小数点后 20 位):2.71828182845904523536,近似值约为 271801/99990。

exp(x) → double

返回欧拉数 e 的 x 次幂。

floor(x) → [返回类型与 x 相同]

返回小于或等于 x 的最大整数(即:向下舍入到最接近的整数)。注意,该函数返回的类型与参数 x 的类型一致。

示例

1
2
3
SELECT typeof(floor(3))        -- integer
SELECT typeof(floor(4.999)) -- decimal(2,0)
SELECT typeof(floor(123.019)) -- decimal(4,0)

from_base(string, radix) → bigint

radix 进制的字符串 string 转换为 bigint。

示例

1
2
3
SELECT from_base('100', 16);  -- 256
SELECT from_base('100', 2); -- 4
SELECT from_base('100', 10); -- 100

ln(x) → double

返回 x 的自然对数。

自然对数是以常数 e 为底数的对数,记作 lnN(N>0)。

示例

1
2
3
SELECT ln(e());  -- 1
SELECT ln(1); -- 0
SELECT ln(2); -- 0.6931471805599453

log2(x) → double

返回 x 以 2 为底的对数。

log10(x) → double

返回 x 以 10 为底的对数。

mod(n, m) → [返回类型与输入相同]

返回 n 除以 m 的余数。

示例

1
2
SELECT mod(4, 2);  -- 0
SELECT mod(2, 4); -- 2

pi() → double

返回常数 π。

pow(x, p) → double

返回 x 的 p 次幂,power() 函数的别名。

power(x, p) → double

返回 x 的 p 次幂。

radians(x) → double

将度数 x 转换为弧度。

如何将度数转换为弧度?

π 弧度等于180度:π 弧度 = 180°

1 度等于 0.01745329252 弧度:

1°=π / 180°=0.005555556π= 0.01745329252 弧度

弧度 = 度 × π / 180°

示例

1
SELECT radians(180)  -- 3.141592653589793

rand() → double

返回范围在 0.0 <= x < 1.0 之间的伪随机值,random() 函数的别名。

random() → double

返回范围在 0.0 <= x < 1.0 之间的伪随机值。

secure_rand() → double

返回范围在0.0 <= x < 1.0之间的加密安全随机值,secure_random() 函数的别名。

secure_random() → double

返回范围在0.0 <= x < 1.0之间的加密安全随机值。

secure_random(lower, upper) → [返回类型与 x 相同]

返回范围在lower <= x < upper之间的加密安全随机值,其中 lower < upper。

round(x) → [返回类型与 x 相同]

返回 x 四舍五入后的整数。

示例

1
2
3
SELECT round(3.49);  -- 3
SELECT round(3.52); -- 4
SELECT round(3.59); -- 4

round(x, d) → [返回类型与 x 相同]

将 x 四舍五入到小数点后 d 位。

示例

1
2
3
SELECT round(3.49, 1);     -- 3.5
SELECT round(3.5251, 2); -- 3.53
SELECT round(3.59491, 2); -- 3.59

sign(x) → [返回类型与 x 相同]

返回 x 的符号函数,即:

  • 如果参数为 0,则返回 0;
  • 如果参数大于 0,则返回 1;
  • 如果参数小于 0,则返回 -1。

对于 double 参数,该函数另外返回:

  • 如果参数为 NaN,则返回 NaN;
  • 如果参数为 +Infinity,则返回 1;
  • 如果参数为 -Infinity,则返回 -1。

sqrt(x) → double

返回 x 的平方根。

to_base(x, radix) → varchar

将 x 转换为 radix 进制字符串。

示例

1
2
3
SELECT to_base(256, 16); -- 100
SELECT to_base(4, 2); -- 100
SELECT to_base(100, 10); -- 100

truncate(x) → double

返回 x 舍弃小数位后取整的整数。

示例

1
2
SELECT truncate(2.5921);    -- 2
SELECT truncate(-3.14159); -- -3

truncate(x, n) → double

返回 x 截断到小数点后 n 位。n 可以是负数,以截断小数点左侧的 n 位数。

示例

1
2
3
4
5
SELECT truncate(2.5921, 1);   -- 2.5
SELECT truncate(-3.14159, 3); -- -3.141
SELECT truncate(REAL '12.333', -1); -- 10.0
SELECT truncate(REAL '12.333', 0); -- 12.0
SELECT truncate(REAL '12.333', 1); -- 12.3

width_bucket(x, bound1, bound2, n) → bigint

将指定的边界 bound1 ~ bound2 均分为 n 等份(即 n 个等值区间)返回 x 所处区间(区间编号从 0 开始)。

示例

在以下示例中,将边界 0 ~ 30 均匀划分为 3 个等值区间,即 [0, 10),[10, 20),[20, 30),区间编号分别为 1、2、3,小于 0 的区间编号为 0 ,大于 30 的区间编号为 4。

当 x 的值分别为 -1,0,10,20,30,50 时,返回 x 所属区间号。

1
2
3
4
5
6
SELECT width_bucket(-1, 0, 30, 3);  -- 0
SELECT width_bucket(0, 0, 30, 3); -- 1
SELECT width_bucket(10, 0, 30, 3); -- 2
SELECT width_bucket(20, 0, 30, 3); -- 3
SELECT width_bucket(30, 0, 30, 3); -- 4
SELECT width_bucket(50, 0, 30, 3); -- 4

width_bucket(x, bins) → bigint

指定预设边界数组 bins,返回 x 所处区间(区间编号从 0 开始)。bins 参数必须是一个 double 类型的数组,并且是按升序排序的。

示例

用数组 [10, 20, 30] 表示自定义区间分布,其分布如下:

1
2
3
4
<10    
[10, 20)
[20, 30)
>= 30
1
2
3
4
SELECT width_bucket(1, array[10, 20, 30]);   -- 0
SELECT width_bucket(10, array[10, 20, 30]); -- 1
SELECT width_bucket(25, array[10, 20, 30]); -- 2
SELECT width_bucket(60, array[10, 20, 30]); -- 3

统计函数

wilson_interval_lower(successes, trials, z) → double

返回伯努利试验过程在由z分数z指定的置信水平下的Wilson分数区间的下界。

wilson_interval_upper(successes, trials, z) → double

返回伯努利试验过程在由z分数z指定的置信水平下的Wilson分数区间的上界。

三角函数

所有三角函数的参数均以弧度表示。参见单位转换函数 degrees()radians()

acos(x) → double

返回x的反余弦。

asin(x) → double

返回x的反正弦。

atan(x) → double

返回x的反正切。

atan2(y, x) → double

返回y / x的反正切。

cos(x) → double

返回x的余弦。

cosh(x) → double

返回x的双曲余弦。

sin(x) → double

返回x的正弦。

tan(x) → double

返回x的正切。

tanh(x) → double

返回x的双曲正切。

浮点数函数

infinity() → double

返回代表正无穷大的常量。

is_finite(x) → boolean

判断x是否是有限的。

is_infinite(x) → boolean

判断x是否是无穷大的。

is_nan(x) → boolean

判断x是否不是一个数字(非数字)。

nan() → double

返回代表不是数字的常量。

(END)