技术分享|GBase 8a 数值型函数

1.1 数值函数

1.1.1 算术操作符

常用的算术操作符均是可用的。

注意,如果两个参数均是整型,“-”,“+”和“*”以BIGINT(64位)精度运算并返回结果。

如果一个参数是无符号的整数,其他参数是整数,结果为无符号整数。

1.1.1.1 + 加法

示例1:两个操作数都是整型。

gbase> SELECT 3+5 FROM t;

+-----+

| 3+5 |

+-----+

|   8 |

+-----+

1 row in set

1.1.1.2 减法

示例1:两个操作数都是整型。

gbase> SELECT 3-5 FROM t;

+-----+

| 3-5 |

+-----+

|  -2 |

+-----+

1 row in set

1.1.1.3 * 乘法

示例1:两个操作数都是整型。

gbase> SELECT 3*5 FROM t;

+-----+

| 3*5 |

+-----+

|  15 |

+-----+

1 row in set

1.1.1.4 / 除法

示例1:两个操作数都是整型。

gbase> SELECT 3/5 FROM t;

+--------+

| 3/5    |

+--------+

| 0.6000 |

+--------+

1 row in set

示例2:除数为0,返回值为NULL。

gbase> SELECT 102/(1-1) FROM t;

+-----------+

| 102/(1-1) |

+-----------+

|      NULL |

+-----------+

1 row in set

只有当在一个结果被转换到一个整数的上下文中执行时,除法才会以BIGINT进行算术计算。

1.1.2 数学函数

所有的数学函数在发生错误的情况下,均返回NULL。

1.1.2.1 ABS(X)

返回X的绝对值。这个函数支持使用BIGINT值。

示例1:X为正数。

gbase> SELECT ABS(2) FROM t;

+--------+

| ABS(2) |

+--------+

|      2 |

+--------+

1 row in set

示例2:X为负数。

gbase> SELECT ABS(-32) FROM t;

+----------+

| ABS(-32) |

+----------+

|       32 |

+----------+

1 row in set

1.1.2.2 ACOS(X)

返回X的反余弦,即返回余弦值为X的值。

如果X不在-1到1之间的范围内,返回NULL。

示例1:X为正数。

gbase> SELECT ACOS(1) FROM t;

+---------+

| ACOS(1) |

+---------+

|       0 |

+---------+

1 row in set

示例2:X为小数。

gbase> SELECT ACOS(1.0001) FROM t;

+--------------+

| ACOS(1.0001) |

+--------------+

|         NULL |

+--------------+

1 row in set

示例3:X为0。

gbase> SELECT ACOS(0) FROM t;

+-----------------+

| ACOS(0)         |

+-----------------+

| 1.5707963267949 |

+-----------------+

1 row in set

1.1.2.3 ASIN(X)

返回X的反正弦,即返回正弦值为X的值。

如果X不在-1到1之间的范围内,返回NULL。

示例1:X为小数。

gbase> SELECT ASIN(0.2) FROM t;

+-------------------+

| ASIN(0.2)         |

+-------------------+

| 0.201357920790331 |

+-------------------+

1 row in set

示例2:X为正整数。

gbase> SELECT ASIN(2) FROM t;

+---------+

| ASIN(2) |

+---------+

|    NULL |

+---------+

1 row in set

1.1.2.4 ATAN(X)

返回X的反正切,即返回正切值为X的值。

示例1:X为正整数。

gbase> SELECT ATAN(2) FROM t;

+------------------+

| ATAN(2)          |

+------------------+

| 1.10714871779409 |

+------------------+

1 row in set

示例2:X为负整数。

gbase> SELECT ATAN(-2) FROM t;

+-------------------+

| ATAN(-2)          |

+-------------------+

| -1.10714871779409 |

+-------------------+

1 row in set

1.1.2.5 ATAN(Y,X)ATAN2(Y,X)

返回两个变量X和Y的反正切。它类似于计算Y/X的反正切,两个参数的符号用于决定结果所在的象限。

示例1:返回“-2/2”的反正切。

gbase> SELECT ATAN(-2,2) FROM t;

+--------------------+

| ATAN(-2,2)         |

+--------------------+

| -0.785398163397448 |

+--------------------+

1 row in set

示例2:返回“PI()/0”的反正切。

gbase> SELECT ATAN2(PI(),0) FROM t;

+-----------------+

| ATAN2(PI(),0)   |

+-----------------+

| 1.5707963267949 |

+-----------------+

1 row in set

1.1.2.6 CEILING(X),CEIL(X)

返回不小于X的最小整数。

示例1:X为正数。

gbase> SELECT CEILING(1.23) FROM t;

+---------------+

| CEILING(1.23) |

+---------------+

|             2 |

+---------------+

1 row in set

示例2:X为负数。

gbase> SELECT CEIL(-1.23) FROM t;

+-------------+

| CEIL(-1.23) |

+-------------+

|          -1 |

+-------------+

1 row in set

1.1.2.7 COS(X)

返回X的余弦,此处,X以弧度给出。

示例1:X为PI()。

gbase> SELECT COS(PI())FROM t;

+-----------+

| COS(PI()) |

+-----------+

|        -1 |

+-----------+

1 row in set

1.1.2.8 DEGREES(X)

将参数X从弧度转换为角度。

示例1:X为PI()。

gbase> SELECT DEGREES(PI())FROM t;

+---------------+

| DEGREES(PI()) |

+---------------+

|           180 |

+---------------+

1 row in set

1.1.2.9 EXP(X)

返回基数为e,幂值为X的值,即返回e的n次幂。

示例1:返回e的2次幂。

gbase> SELECT EXP(2) FROM t;

+------------------+

| EXP(2)           |

+------------------+

| 7.38905609893065 |

+------------------+

1 row in set

示例2:返回e的-2次幂。

gbase> SELECT EXP(-2) FROM t;

+-------------------+

| EXP(-2)           |

+-------------------+

| 0.135335283236613 |

+-------------------+

1 row in set

1.1.2.10 FLOOR(X)

返回不大于X的最大整数值。

如果参数X是NULL,则返回结果为NULL。

示例1:X为正数。

gbase> SELECT FLOOR(1.23) FROM t;

+-------------+

| FLOOR(1.23) |

+-------------+

|           1 |

+-------------+

1 row in set

示例2:X为负数。

gbase> SELECT FLOOR(-1.23) FROM t;

+--------------+

| FLOOR(-1.23) |

+--------------+

|           -2 |

+--------------+

1 row in set

示例3:X为NULL。

gbase> SELECT FLOOR(NULL) FROM t;

+-------------+

| FLOOR(NULL) |

+-------------+

|        NULL |

+-------------+

1 row in set

1.1.2.11 LN(X)

返回X的自然对数。

示例1:返回2的自然对数。

gbase> SELECT LN(2) FROM t;

+-------------------+

| LN(2)             |

+-------------------+

| 0.693147180559945 |

+-------------------+

1 row in set

示例2:返回-2的自然对数。

gbase> SELECT LN(-2) FROM t;

+--------+

| LN(-2) |

+--------+

|   NULL |

+--------+

1 row in set

1.1.2.12 LOG(B,X)

示例3:以两个参数调用,这个函数返回以B为底,X的对数。

gbase> SELECT LOG(2,65536) FROM t;

+--------------+

| LOG(2,65536) |

+--------------+

|           16 |

+--------------+

1 row in set

示例4:LOG(B,X)等同于LOG(X)/LOG(B)。

gbase> SELECT LOG(1,100) FROM t;

+------------+

| LOG(1,100) |

+------------+

|       NULL |

+------------+

1 row in set

1.1.2.13 LOG10(X)

返回X以10为底的对数。

示例1:返回以10为底,“2”的对数。

gbase> SELECT LOG10(2) FROM t;

+-------------------+

| LOG10(2)          |

+-------------------+

| 0.301029995663981 |

+-------------------+

1 row in set

示例2:返回以10为底,“100”的对数。

gbase> SELECT LOG10(100) FROM t;

+------------+

| LOG10(100) |

+------------+

|          2 |

+------------+

1 row in set

示例3:返回以10为底,“-100”的对数。

gbase> SELECT LOG10(-100) FROM t;

+-------------+

| LOG10(-100) |

+-------------+

|        NULL |

+-------------+

1 row in set

1.1.2.14 MOD(N,M)N % MN MOD M

取模。返回N除以M后的余数。

示例1:返回234除以10的余数。

gbase> SELECT MOD(234, 10) FROM t;

+--------------+

| MOD(234, 10) |

+--------------+

|            4 |

+--------------+

1 row in set

示例2:返回253除以7的余数。

gbase> SELECT 253 % 7 FROM t;

+---------+

| 253 % 7 |

+---------+

|       1 |

+---------+

1 row in set

示例3:MOD(29,9)与29 MOD 9结果相同。

gbase> SELECT MOD(29,9) FROM t;

+-----------+

| MOD(29,9) |

+-----------+

|         2 |

+-----------+

1 row in set

gbase> SELECT 29 MOD 9 FROM t;

+----------+

| 29 MOD 9 |

+----------+

|        2 |

+----------+

1 row in set

示例4:MOD()也适用于小数部分,返回除法运算后的精确余数。

gbase> SELECT MOD(34.5,3) FROM t;

+-------------+

| MOD(34.5,3) |

+-------------+

|         1.5 |

+-------------+

1 row in set

示例5:取模的三种表现形式。

gbase> SELECT 253 % 7, MOD(253,7), 253 MOD 7 FROM t;

+---------+------------+-----------+

| 253 % 7 | MOD(253,7) | 253 MOD 7 |

+---------+------------+-----------+

|       1 |          1 |         1 |

+---------+------------+-----------+

1 row in set

1.1.2.15 POW(X,Y)POWER(X,Y)

返回X的Y次幂。

示例1:返回2的2次幂。

gbase> SELECT POW(2,2) FROM t;

+----------+

| POW(2,2) |

+----------+

|        4 |

+----------+

1 row in set

示例2:返回2的-2次幂。

gbase> SELECT POW(2,-2) FROM t;

+-----------+

| POW(2,-2) |

+-----------+

|      0.25 |

+-----------+

1 row in set

1.1.2.16 RADIANS(X)

将参数X从角度转换为弧度,然后返回。

示例1:返回90度对应的弧度。

gbase> SELECT RADIANS(90) FROM t;

+-----------------+

| RADIANS(90)     |

+-----------------+

| 1.5707963267949 |

+-----------------+

1 row in set

1.1.2.17 ROUND(X)ROUND(X,D)

ROUND(X)返回参数X四舍五入到最近的整数后的值。

ROUND(X,D)返回的X值,保留到小数点后D位(第D位的保留方式为四舍五入)。

如果D值为负数,则保留的X值为小数点左边的D位数字。

示例1:X为“-1.23”,返回结果为-1。

gbase> SELECT ROUND(-1.23) FROM t;

+--------------+

| ROUND(-1.23) |

+--------------+

|           -1 |

+--------------+

1 row in set

示例2:X为“-1.58”,返回结果为-2。

gbase> SELECT ROUND(-1.58) FROM t;

+--------------+

| ROUND(-1.58) |

+--------------+

|           -2 |

+--------------+

1 row in set

示例3:X为“1.58”,返回结果为2。

gbase> SELECT ROUND(1.58) FROM t;

+-------------+

| ROUND(1.58) |

+-------------+

|           2 |

+-------------+

1 row in set

示例4:对“1.298”进行四舍五入,小数点后保留1位数字。

gbase> SELECT ROUND(1.298, 1) FROM t;

+-----------------+

| ROUND(1.298, 1) |

+-----------------+

|             1.3 |

+-----------------+

1 row in set

示例5:对“1.298”进行四舍五入,小数点后保留0位数字。

gbase> SELECT ROUND(1.298, 0) FROM t;

+-----------------+

| ROUND(1.298, 0) |

+-----------------+

|               1 |

+-----------------+

1 row in set

示例6:对“23.298”进行四舍五入,小数点后保留“-1”位数字,即个位数字。

gbase> SELECT ROUND(23.298, -1) FROM t;

+-------------------+

| ROUND(23.298, -1) |

+-------------------+

|                20 |

+-------------------+

1 row in set

返回值类型和第一个参数的类型相同。

当第一个参数是DECIMAL时,ROUND()为了精确计算使用精确计算库。

对于精确值数字,ROUND()使用“四舍五入”或“舍入成最接近的数”的规则:

如果一个值的小数部分为.5或比该值大,那么向上舍入为下一个整数(如1.5四舍五入后为2),对于负数来说,向下舍入为下一个负数(如-1.5四舍五入后为-2)。

如果一个值的小数部分比.5小,那么向下舍入为上一个整数(如1.4四舍五入后为1),对于负数来说,向上舍入为上一个负数(如-1.4四舍五入后为-1)。

对于近似值数字,其结果根据C库而定。在很多系统中,这意味着ROUND()的使用遵循“舍入成最接近的偶数”的规则:

一个带有任何小数部分的值会被舍入成最接近的偶数整数。对于25E-1,它认为20E-1离它最近。

示例7:对于精确值和近似值舍入的不同之处。

gbase> SELECT ROUND(2.5), ROUND(25E-1) FROM t;

+------------+--------------+

| ROUND(2.5) | ROUND(25E-1) |

+------------+--------------+

|          3 |            2 |

+------------+--------------+

1 row in set

示例8:将数值插入到DECIMAL列,因为目标是精确值类型,所以舍入使用向上取原则,不考虑插入值是精确值还是近似值。

gbase> DROP TABLE IF EXISTS t1;

Query OK, 0 rows affected

gbase> CREATE TABLE t1 (d DECIMAL(10,0));

Query OK, 0 rows affected

gbase> INSERT INTO t1 VALUES(2.5),(2.5E0);

Query OK, 2 rows affected, 2 warnings

Records: 2  Duplicates: 0  Warnings: 2

gbase> SELECT d FROM t1;

+------+

| d    |

+------+

|    3 |

|    3 |

+------+

2 rows in set

示例9:对于DECIMAL列和精确值的舍入使用向上舍入一半的原则。数值小数部分为0.5或者更大时,则舍入到最近整数。

gbase> SELECT ROUND(2.5), ROUND(-2.5) FROM t;

+------------+-------------+

| ROUND(2.5) | ROUND(-2.5) |

+------------+-------------+

|          3 |          -3 |

+------------+-------------+

1 row in set

1.1.2.18 SIGN(X)

根据X值是正数、0还是负数,分别返回-1、0或1。

示例1:X为负数,返回-1。

gbase> SELECT SIGN(-32) FROM t;

+-----------+

| SIGN(-32) |

+-----------+

|        -1 |

+-----------+

1 row in set

示例2:X为“0”,返回0。

gbase> SELECT SIGN(0) FROM t;

+---------+

| SIGN(0) |

+---------+

|       0 |

+---------+

1 row in set

示例3:X为正数,返回1。

gbase> SELECT SIGN(234) FROM t;

+-----------+

| SIGN(234) |

+-----------+

|         1 |

+-----------+

1 row in set

1.1.2.19 SIN(X)

返回X的正弦,此处,X以弧度给出。

示例1:返回“PI()”的正弦。

gbase> SELECT SIN(PI())FROM t;

+----------------------+

| SIN(PI())            |

+----------------------+

| 1.22464679914735e-16 |

+----------------------+

1 row in set

1.1.2.20 SQRT(X)

返回X的非负平方根。

示例1:返回“4”的平方根。

gbase> SELECT SQRT(4) FROM t;

+---------+

| SQRT(4) |

+---------+

|       2 |

+---------+

1 row in set

示例2:返回“20”的平方根。

gbase> SELECT SQRT(20) FROM t;

+------------------+

| SQRT(20)         |

+------------------+

| 4.47213595499958 |

+------------------+

1 row in set

1.1.2.21 TAN(X)

返回X的正切,在这里,X以弧度给出。

示例1:返回“PI()+1”的正切值。

gbase> SELECT TAN(PI()+1) FROM t;

+-----------------+

| TAN(PI()+1)     |

+-----------------+

| 1.5574077246549 |

+-----------------+

1 row in set

1.1.2.22 TRUNCATE(X,D)

返回数值X截取到D位小数后的数字。

如果D为0,结果将不包含小数点和小数部分。

如果D为负数,表示截去(归零)X值小数点左边第D位开始后面所有低位的值。

参数X仅支持数值类型,若为其他数据类型,返回的结果无意义。

示例1:X为“1.223”,小数点后保留一位。

gbase> SELECT TRUNCATE(1.223,1) FROM t;

+-------------------+

| TRUNCATE(1.223,1) |

+-------------------+

|               1.2 |

+-------------------+

1 row in set

示例2:X为“1.999”,小数点后保留一位。

gbase> SELECT TRUNCATE(1.999,1) FROM t;

+-------------------+

| TRUNCATE(1.999,1) |

+-------------------+

|               1.9 |

+-------------------+

1 row in set

示例3:D为“0”,返回值不包含小数点和小数部分。

gbase> SELECT TRUNCATE(1.999,0) FROM t;

+-------------------+

| TRUNCATE(1.999,0) |

+-------------------+

|                 1 |

+-------------------+

1 row in set

示例4:X为“-1.999”,小数点后保留一位。

gbase> SELECT TRUNCATE(-1.999,1) FROM t;

+--------------------+

| TRUNCATE(-1.999,1) |

+--------------------+

|               -1.9 |

+--------------------+

1 row in set

示例5:D为-2,个位十位归零。

gbase> SELECT TRUNCATE(122,-2) FROM t;

+------------------+

| TRUNCATE(122,-2) |

+------------------+

|              100 |

+------------------+

1 row in set

示例6:十进值小数在计算机中通常不以精确数字存储,而是双精度型的值。

gbase> SELECT TRUNCATE(10.28*100,0) FROM t;

+-----------------------+

| TRUNCATE(10.28*100,0) |

+-----------------------+

|                  1028 |

+-----------------------+

1 row in set

返回结果为1028,是因为10.28实际上是以某些像10.2799999999999999的形式被存储的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值