postgresql数学函数与操作符

本文深入探讨了SQL中数学操作符、位操作、数学函数的应用,并提供了实例演示,包括取模、绝对值、幂运算、平方根、三次方根、四次方根、五次方根、阶乘、自然指数、对数、判断正负号、圆周率常量、三角函数、随机数生成、直方图相关、宽度桶函数以及各种数学函数的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数学操作符

取模,绝对值

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

转载于:https://my.oschina.net/hippora/blog/379870

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值