# 数学函数
#### abs(x)
描述：计算x的绝对值。
输入参数x支持bigint、double precision、integer、numeric、real或smallint类型。
返回值类型：和输入相同。
示例：
```
SELECT abs(-17.4);
 abs
------
 17.4
(1 row)
```
#### acos(x)
描述：计算x的反余弦。
输入参数为double precision类型。取值范围为\[-1,1\]。
返回值类型：double precision
示例：
```
SELECT acos(-1);
       acos       
------------------
 3.14159265358979
(1 row)
```
#### asin(x)
描述：计算x的反正弦。
输入参数为double precision类型。取值范围为\[-1,1\]。
返回值类型：double precision
示例：
```
SELECT asin(0.5);
       asin       
------------------
 0.523598775598299
(1 row)
```
#### atan(x)
描述：计算x反正切函数。
输入参数为double precision类型。
返回值类型：double precision
示例：
```
SELECT atan(1);
       atan       
------------------
 0.785398163397448
(1 row)
```
#### atan2(y, x)
描述：计算y/x的反正切函数。
输入参数为double precision类型。
返回值类型：double precision
示例：
```
SELECT atan2(2, 1);
      atan2
------------------
 1.10714871779409
(1 row)
```
#### bitand(integer, integer)
描述：计算两个数字与运算(\&)的结果。
返回值类型：bigint
示例：
```
SELECT bitand(127, 63);
 bitand 
--------
     63
(1 row)
```
#### sqrt(double precision or numeric)
描述：计算给定数值的平方根。
返回值类型：与输入类型相同。
示例：
```
SELECT sqrt(16.0);
       sqrt
-------------------
 4.000000000000000
(1 row)
```
#### cbrt(double precision)
描述：计算给定数值的立方根。
返回值类型：double precision
示例：
```
SELECT cbrt(27.0);
 cbrt
------
    3
(1 row)
```
 #### ceil(double precision or numeric)
描述：对给定值向上取整。x为正数，则朝远离0的方向取整。x为负数，则朝向0的方向取整。
返回值类型：与输入类型相同。
示例：
```
SELECT ceil(-42.8);
 ceil 
------
  -42
(1 row)
```
#### ceiling(double precision or numeric)
描述：对给定值向上取整（[ceil(double precision or numeric)]函数的别名）。
返回值类型：与输入类型相同。
示例：
```
SELECT ceiling(-95.3);
 ceiling
---------
     -95
(1 row)
```
#### floor(double precision or numeric)
描述：对给定值向下取整。x为正数，则朝向0的方向取整；x为负数，则朝远离0的方向取整。
返回值类型：与输入类型相同。
示例：
```
SELECT floor(-42.8);
 floor 
-------
   -43
(1 row)
```
#### cos(x)
描述：计算x的余弦。
输入参数为double precision类型。
返回值类型：double precision
示例：
```
SELECT cos(-3.1415927);
        cos        
-------------------
 -0.999999999999999
(1 row)
```
#### sin(x)
描述：计算x的正弦。
输入参数为double precision类型。
返回值类型：double precision
示例：
```
SELECT sin(1.57079);
       sin        
------------------
 0.999999999979986
(1 row)
```
#### tan(x)
描述：计算x的正切。
返回值类型：double precision
示例：
```
SELECT tan(20);
       tan        
------------------
 2.23716094422474
(1 row)
```
#### cot(x)
描述：计算x的余切。
输入参数为double precision类型。
返回值类型：double precision
示例：
```
SELECT cot(1);
       cot
------------------
 0.642092615934331
(1 row)
```
#### degrees(double precision)
描述：将弧度转为角度。
返回值类型：double precision
示例：
```
SELECT degrees(0.5);
     degrees
------------------
 28.6478897565412
(1 row)
```
#### radians(double precision)
描述：将角度转为弧度。
返回值类型：double precision
示例：
```
SELECT radians(45.0);
     radians
------------------
 0.785398163397448
(1 row)
```
#### div(y numeric, x numeric)
描述：y除以x的商的整数部分。
返回值类型：numeric
示例：
```
SELECT div(9,4);
 div
-----
   2
(1 row)
```
#### exp(double precision or numeric)
描述：计算给定值的自然指数。
返回值类型：与输入类型相同。
示例：
```
SELECT exp(1.0);
        exp         
--------------------
 2.7182818284590452
(1 row)
```
#### random()
描述：返回0.0到1.0之间的随机数。
返回值类型：double precision
示例：
```
SELECT random();
      random
------------------
 0.824823560658842
(1 row)
```
#### rand()
描述：返回0.0到1.0之间的随机数。此函数为Mysql兼容性函数，仅8.2.0及以上集群版本支持。
返回值类型：double precision
示例：
```
SELECT rand();
      rand
------------------
 0.824823560658842
(1 row)
```
#### ln(double precision or numeric)
描述：自然对数。
返回值类型：与输入类型相同。
示例：
```
SELECT ln(2.0);
        ln         
-------------------
 0.6931471805599453
(1 row)
```
#### log(double precision or numeric)
描述：计算以10为底的对数。
- ORA和TD兼容模式下，表现为以10为底的对数。
- MySQL兼容模式下，表现为自然对数。
返回值类型：与输入类型相同。
示例：
ORA和TD兼容模式下计算给定数值100以10为底的对数。
```
SELECT log(100.0);
        log         
--------------------
 2.0000000000000000
(1 row)
```
MySQL兼容模式下计算给定数值100以自然数为底的对数。
```
SELECT log(100.0);
        log
--------------------
 4.6051701859880914
(1 row)
```
#### log(b numeric, x numeric)
描述：计算x以b为底数的对数。
返回值类型：numeric
示例：计算64.0以2.0为底的对数
```
SELECT log(2.0, 64.0);
        log         
--------------------
 6.0000000000000000
(1 row)
```
#### mod(x,y)
描述：计算x/y的余数（即取模运算）。如果x是0，则返回0。如果y是0，则返回x。
返回值类型：与参数类型相同。
示例：
```
SELECT mod(9,4);
 mod 
-----
   1
(1 row)
```
```
SELECT mod(9,0);
 mod 
-----
   9
(1 row)
```
#### pi()
描述：返回"π"值，精确到小数点后15位。
返回值类型：double precision
示例：
```
SELECT pi();
        pi
------------------
 3.141592653589793
(1 row)
```
#### power(a double precision, b double precision)
描述：计算a的b次幂。
返回值类型：double precision
示例：
```
SELECT power(9.0, 3.0);
        power         
----------------------
 729.0000000000000000
(1 row)
```
#### round(double precision\| numeric)
描述：将给定数值进行四舍五入。
返回值类型：与输入类型相同。
示例：
```
SELECT round(42.4);
 round 
-------
    42
(1 row)
SELECT round(42.6);
 round 
-------
    43
(1 row)
```
![](https://support.huaweicloud.com/sqlreference-911-dws/public_sys-resources/note_3.0-zh-cn.png)
当调用round函数时，数值类型将舍入到零，而（在大多数计算机上） 实数和双精度类型，以最接近的偶数为结果。
#### round(v numeric, s int)
描述：将给定数值进行四舍五入，保留小数点后s位。
返回值类型：numeric
示例：
```
SELECT round(42.4382, 2);
 round
-------
 42.44
(1 row)
```
#### setseed(double precision)
描述：为随后的random()调用设置种子(-1.0到1.0之间，包含边界值)。
返回值类型：void
示例：
```
SELECT setseed(0.54823);
 setseed
---------
(1 row)
```
#### sign(double precision or numeric)
描述：返回给定值的符号，通过1、0、-1表示。
返回值-1表示给定值为负数，返回值0表示给定值为0，返回值1表示给定值为正数。
示例：
```
SELECT sign(-8.4);
 sign 
------
   -1
(1 row)
```
#### trunc(double precision or numeric)
描述：截断给定值的小数部分（即取整数部分）。
返回值类型：与输入类型相同。
示例：
```
SELECT trunc(42.8);
 trunc 
-------
    42
(1 row)
```
#### trunc(v numeric, s int)
描述：截断给定值v的小数部分，保留小数点后s位。
返回值类型：numeric
示例：
```
SELECT trunc(42.4382, 2);
 trunc
-------
 42.43
(1 row)
```
#### truncate(v numeric, s int)
描述：截断给定值v的小数部分，保留小数点后s位。
v除了可以是任意精度型，还可以是整型和浮点型，返回值与入参v类型相同。s为负数时截断整数部分。该函数仅8.2.0及以上集群版本支持。
返回值类型：numeric
示例：
```
SELECT truncate(42.4382, 2);
 truncate
-------
 42.4300
(1 row)
```
#### width_bucket(operand numeric, b1 numeric, b2 numeric, count int)
描述：设定分组范围的最小值、最大值和分组个数，构建指定个数的大小相同的分组，返回指定字段值落入的分组编号。b1为分组范围的最小值，b2为分组范围的最大值，count为分组的个数。
返回值类型：integer
示例：
```
SELECT width_bucket(5.35, 0.024, 10.06, 5);
 width_bucket
--------------
            3
(1 row)
```
#### width_bucket(operand double precision, b1 double precision, b2 double precision, count int)
描述：设定分组范围的最小值、最大值和分组个数，构建指定个数的大小相同的分组，返回指定字段值落入的分组编号。b1为分组范围的最小值，b2为分组范围的最大值，count为分组的个数。
返回值类型：integer
示例：
```
SELECT width_bucket(5.35, 0.024, 10.06, 5);
 width_bucket
--------------
            3
(1 row)
```
