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 % M,N 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的形式被存储的。