
# 数字操作函数
#### abs(x)
描述：绝对值。
返回值类型：和输入相同。
示例：
```
SELECT abs(-17.4);
 abs
------
 17.4
(1 row)
```
#### acos(x)
描述：反余弦。
返回值类型：double precision
示例：
```
SELECT acos(-1);
       acos       
------------------
 3.14159265358979
(1 row)
```
#### asin(x)
描述：反正弦。
返回值类型：double precision
示例：
```
SELECT asin(0.5);
       asin       
------------------
 0.523598775598299
(1 row)
```
#### atan(x)
描述：反正切。
返回值类型：double precision
示例：
```
SELECT atan(1);
       atan       
------------------
 0.785398163397448
(1 row)
```
#### atan2(y, x)
描述：y/x的反正切。
返回值类型：double precision
示例：
```
SELECT atan2(2, 1);
      atan2
------------------
 1.10714871779409
(1 row)
```
#### bitand(integer, integer)
描述：计算两个数字与运算(\&)的结果。
返回值类型：bigint
示例：
```
SELECT bitand(127, 63);
 bitand 
--------
     63
(1 row)
```
#### cbrt(double precision)
描述：立方根。
返回值类型：double precision
示例：
```
SELECT cbrt(27.0);
 cbrt
------
    3
(1 row)
```
#### ceil(double precision or numeric)
描述：不小于参数的最小的整数。
返回值类型：与输入相同。
示例：
```
SELECT ceil(-42.8);
 ceil 
------
  -42
(1 row)
```
#### ceiling(double precision or numeric)
描述：不小于参数的最小整数（ceil的别名）。
返回值类型：与输入相同。
示例：
```
SELECT ceiling(-95.3);
 ceiling
---------
     -95
(1 row)
```
#### cos(x)
描述：余弦。
返回值类型：double precision
示例：
```
SELECT cos(-3.1415927);
        cos        
-------------------
 -0.999999999999999
(1 row)
```
#### cot(x)
描述：余切。
返回值类型：double precision
示例：
```
SELECT cot(1);
       cot
------------------
 0.642092615934331
(1 row)
```
#### degrees(double precision)
描述：把弧度转为角度。
返回值类型：double precision
示例：
```
SELECT degrees(0.5);
     degrees
------------------
 28.6478897565412
(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)
```
#### floor(double precision or numeric)
描述：不大于参数的最大整数。
返回值类型：与输入相同。
示例：
```
SELECT floor(-42.8);
 floor 
-------
   -43
(1 row)
```
#### fq_iceberg_bucket(int, smallint/int/bigint)
描述：计算指定整数的bucket数值。其中，第一个int参数为bucket数量。
返回值类型：int
示例：
```
fabricsql => select fq_iceberg_bucket(13, 5211314);
 fq_iceberg_bucket
-------------------
                 5
(1 row)
```
#### fq_iceberg_bucket(int, numeric(p, s))
描述：计算指定numeric数据的bucket数值。其中，第一个参数为bucket数量。
返回值类型：int
示例：
```
fabricsql => select fq_iceberg_bucket(13, 1000.50::numeric(15,2));
 fq_iceberg_bucket
-------------------
                 12
(1 row)
```
#### fq_iceberg_truncate(int W, smallint/int/bigint integer_value)
描述：计算不超过integer_value、且为W倍数的最大数值。
返回值类型：与第二个参数的数据类型一致。
示例：
```
fabricsql => select fq_iceberg_truncate (10, 19);
 fq_iceberg_truncate
---------------------
                  10
(1 row)
```
#### fq_iceberg_truncate(int W, numeric(p, s) num_value)
描述：计算不超过num_value、且小数点右移s位后为W倍数的最大数值。
返回值类型：numeric(p, s)
示例：
```
fabricsql => select fq_iceberg_truncate (50, 10.64::numeric(15,3));
 fq_iceberg_truncate
---------------------
              10.600
(1 row)
```
更多fq_iceberg_truncate示例，请参见[分区表达式：truncate](https://support.huaweicloud.com/devg-fabric/dataartsfabric_sql_04_0039.html#ZH-CN_TOPIC_0000002503644071__section193946451718)。
#### radians(double precision)
描述：把角度转为弧度。
返回值类型：double precision
示例：
```
SELECT radians(45.0);
     radians
------------------
 0.785398163397448
(1 row)
```
#### random()
描述：0.0到1.0之间的随机数。
返回值类型：double precision
示例：
```
SELECT random();
      random
------------------
 0.696101832669228
(1 row)
```
#### rand()
描述：0.0到1.0之间的随机数。此函数为Mysql兼容性函数。该函数仅8.2.0及以上集群版本支持。
返回值类型：double precision
示例：
```
SELECT rand();
      rand
------------------
 0.930654047057033
(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兼容模式
SELECT log(100.0);
        log         
--------------------
 2.0000000000000000
(1 row)
-- TD兼容模式
SELECT log(100.0);
        log
--------------------
 2.0000000000000000
(1 row)
-- MySQL兼容模式
SELECT log(100.0);
        log
--------------------
 4.6051701859880914
(1 row)
```
#### log(b numeric, x numeric)
描述：以b为底的对数。
返回值类型：numeric
示例：
```
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()
描述："π"常量。
返回值类型：double precision
示例：
```
SELECT pi();
        pi
------------------
 3.14159265358979
(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 or numeric)
描述：离输入参数最近的整数。
返回值类型：与输入相同。
示例：
```
SELECT round(42.4);
 round 
-------
    42
(1 row)
SELECT round(42.6);
 round 
-------
    43
(1 row)
```
![](https://support.huaweicloud.com/devg-fabric/public_sys-resources/note_3.0-zh-cn.png)
当调用round函数时，数值类型将舍入零，而（在大多数计算机上） 实数和双精度型，以最接近的偶数为结果。
#### round(v numeric, s int)
描述：保留小数点后s位，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表示0，1表示正数。
示例：
```
SELECT sign(-8.4);
 sign 
------
   -1
(1 row)
```
#### sin(x)
描述：正弦。
返回值类型：double precision
示例：
```
SELECT sin(1.57079);
       sin        
------------------
 0.999999999979986
(1 row)
```
#### sqrt(double precision or numeric)
描述：平方根。
返回值类型：与输入相同。
示例：
```
SELECT sqrt(2.0);
       sqrt        
-------------------
 1.414213562373095
(1 row)
```
#### tan(x)
描述：正切。
返回值类型：double precision
示例：
```
SELECT tan(20);
       tan        
------------------
 2.23716094422474
(1 row)
```
#### trunc(double precision or numeric)
描述：截断（取整数部分）。
返回值类型：与输入相同。
示例：
```
SELECT trunc(42.8);
 trunc 
-------
    42
(1 row)
```
#### trunc(v numeric, s int)
描述：截断为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)
```
