数学操作符
取模,绝对值
db01=> select 20%3,@ 10,@ -10; -- @和-要有个空格
2 | 10 | 10
幂
db01=> select 2^8;
256
平方根,三次方根
db01=> select |/2,||/27;
1.4142135623731 | 3
那四次方根,五次方根怎么搞?用幂来搞!
db01=> select 16 ^ (1.0/4),32 ^ (1.0/5);
2.00000000000000000000 | 2.00000000000000000000
1.0不能漏掉小数点
阶乘
db01=> select 4!,!!4;
24 | 24
位操作
位操作只对整数有效
db01=> select B'0011',B'1001',B'0011'::int,B'1001'::int;
0011 | 1001 | 3 | 9
与(&),或(|),非(~),异或(#)
db01=> select 3&9,3|9,3#9,~B'1001';
1 | 11 | 10 | 0110
位移
db01=> select 1 << 8, 256 >> 4 ;
256 | 16
数学函数
取模,绝对值
db01=> select mod(20,3),abs(10),abs(-10);
2 | 10 | 10
幂
db01=> select power(2,8),power(16,1.0/4),power(32,1.0/5);
256 | 2.00000000000000000000 | 2.00000000000000000000
自然指数
db01=> select exp(1),exp(2);
2.71828182845905 | 7.38905609893065
平方根,三次方根
db01=> select sqrt(2),cbrt(27);
1.4142135623731 | 3
square root和cube root缩写
取整
db01=> select div(9.1,4.2);
2
天花板和地板
db01=> select ceil(2.8),ceil(-2.8),ceil(2),ceil(-2);
3 | -2 | 2 | -2
db01=> select floor(2.8),floor(-2.8),floor(2),floor(-2);
2 | -3 | 2 | -2
ceil 取不小于该数的最小整数,ceiling等效. floor 取不大于该数的最大整数.
对数
2048是2的几次方?
db01=> select log(2,2048),log(10000),ln(exp(1));
11.0000000000000000 | 4 | 1
log 默认10为底,ln是自然数为底
判断正负号
db01=> select sign(-8),sign(0),sign(7);
-1 | 0 | 1
pi常量,截取和四舍五入
db01=> select pi();
3.14159265358979
db01=> select trunc(3.1415926),trunc(3.1415926,4);
3 | 3.1415
db01=> select round(3.1415926),round(3.1415926,4);
3 | 3.1416
弧度角度互换
计算135度是多少弧度
db01=> select radians(135),radians(135) = pi() * 3/4;
2.35619449019234 | t
计算1/4 pi的度数
db01=> select degrees(pi()/4),degrees(pi()/4)=45;
45 | t
直方图相关 width_bucket
db01=> select width_bucket(3.5,1,9,9),width_bucket(3.5,1,9,1000);
3 | 313
简单说明: 1-9平均分成9分,然后判断3.5在哪一份中,第二个类似平均分1000分,3.5在第313份中. 这应该算是等深直方图吧,一种统计学中的工具.某些算法中可能需要 oracle中的sql优化器使用高度平衡(等深)和频率直方图来判断数据倾斜来生成更优的执行计划.
产生随机数
db01=> select setseed(0.67),random(); --第一次
| 0.700023469980806
db01=> select setseed(0.67),random(); --第二次
| 0.700023469980806
db01=> select random();
0.965756158344448
random每次调用返回随机数,setseed是喂种子,影响接下来的random函数
三角函数
db01=> select sin(radians(30)),cos(radians(60)),tan(radians(45)),cot(radians(45));
0.5 | 0.5 | 1 | 1
db01=> select asin(0.5),pi()/6,acos(0.5),pi()/3;
0.523598775598299 | 0.523598775598299 | 1.0471975511966 | 1.0471975511966
db01=> select atan(1),atan2(18,18),pi()/4;
0.785398163397448 | 0.785398163397448 | 0.785398163397448
都是使用弧度计算
//END