![PostgreSQL 11从入门到精通(视频教学版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/374/27563374/b_27563374.jpg)
6.2 数学函数
数学函数主要用来处理数值数据,主要的数学函数有绝对值函数、三角函数(包括正弦函数、余弦函数、正切函数、余切函数等)、对数函数、随机数函数等。在有错误产生时,数学函数将会返回空值NULL。本节将介绍各种数学函数的功能和用法。
6.2.1 绝对值函数ABS(x)和返回圆周率的函数PI()
ABS(x)返回x的绝对值。
【例6.1】求2、-3.3和-33的绝对值,输入语句如下:
SELECT ABS(2), ABS(-3.3), ABS(-33);
语句执行后,结果如图6-1所示。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P123_11840.jpg?sign=1738848692-9RldPMeU3MPxkGWvHHI3L7RXfIy0ThzI-0-15dd4ae12fe2349dd604ccb62628df07)
图6-1 SQL语句执行结果
正数的绝对值为其本身,所以2的绝对值为2;负数的绝对值为其相反数,所以-3.3的绝对值为3.3、-33的绝对值为33。
PI()返回圆周率π的值,默认的显示小数位数是6位。
【例6.2】返回圆周率值,输入语句如下:
SELECT pi();
语句执行后,结果如图6-2所示,返回结果保留了15位有效数字。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P123_11856.jpg?sign=1738848692-52gVu8pRo87sY48L1yjQUjfID9HZAc1x-0-9ecf335c45d3b0e09231cd605468bcb8)
图6-2 SQL语句执行结果
6.2.2 平方根函数SQRT(x)和求余函数MOD(x,y)
SQRT(x)返回非负数x的二次方根。
【例6.3】求9、40的二次平方根,输入语句如下:
SELECT SQRT(9), SQRT(40);
语句执行后,结果如图6-3所示。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P124_11885.jpg?sign=1738848692-vjRCpt8nwNznDd4l5wRqaIGgEkMwRDzD-0-931baec72ec8b7e042d78620f68d3199)
图6-3 SQL语句执行结果
注 意
3的平方等于9,因此9的二次平方根为3;40的平方根为6.32455532033676,负数没有平方根,如果所求值为负数,将会提示错误信息。
MOD(x,y)返回x被y除后的余数。MOD()对于带有小数部分的数值也起作用,返回除法运算后的精确余数。
【例6.4】对(31,8)、(234,10)、(45.5,6)进行求余运算,输入语句如下:
SELECT MOD(31,8),MOD(234, 10),MOD(45.5,6);
语句执行后,结果如图6-4所示。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P124_11903.jpg?sign=1738848692-nXMbKBtEH0VajHBhMCkVLJEkIlH9h400-0-fa21512268d50472fdddccfb548862d3)
图6-4 SQL语句执行结果
6.2.3 获取整数的函数CEIL(x)、CEILING(x)和FLOOR(x)
CEIL(x)和CEILING(x)的意义相同,返回不小于x的最小整数值,返回值转化为一个BIGINT。
【例6.5】使用CEIL和CEILING函数返回最小整数,输入语句如下:
SELECT CEIL(-3.35),CEILING(3.35);
语句执行后,结果如图6-5所示。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P125_11932.jpg?sign=1738848692-GrPpyY8MkmjVBdAHVyWVG1Y3fSYTRZns-0-fb1f80e4927a6603cb3ccf4d06aef437)
图6-5 SQL语句执行结果
-3.35为负数,不小于-3.35的最小整数为-3,因此返回值为-3;不小于3.35的最小整数为4,因此返回值为4。
FLOOR(x)返回不大于x的最大整数值,返回值转化为一个BIGINT。
【例6.6】使用FLOOR函数返回最大整数,输入语句如下:
SELECT FLOOR(-3.35), FLOOR(3.35);
语句执行后,结果如图6-6所示。
-3.35为负数,不大于-3.35的最大整数为-4,因此返回值为-4;不大于3.35的最大整数为3,因此返回值为3。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P125_11949.jpg?sign=1738848692-cZ2AZO363B6dZKXTAUaeLW45QCrENLP8-0-75a2a92a59355808d5d9d978b50a906c)
图6-6 SQL语句执行结果
6.2.4 四舍五入函数ROUND(x)和ROUND(x,y)
ROUND(x)返回最接近于参数x的整数,对x值进行四舍五入。
【例6.7】使用ROUND(x)函数对操作数进行四舍五入操作,输入语句如下:
SELECT ROUND(-1.14),ROUND(-1.67), ROUND(1.14),ROUND(1.66);
语句执行后,结果如图6-7所示。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P126_1.jpg?sign=1738848692-SPFGwWNNN02fGL7swOsjulzkU9IMqs4t-0-45e01b007d5b3a799452b9b7737bfb06)
图6-7 SQL语句执行结果
可以看到,四舍五入处理之后,只保留了各个值的整数部分。
ROUND(x,y)返回最接近于参数x的数,其值保留到小数点后面y位,若y为负值,则将保留x值到小数点左边y位。
【例6.8】使用ROUND(x,y)函数对操作数进行四舍五入操作,结果保留小数点后面指定y位,输入语句如下:
SELECT ROUND(1.38, 1), ROUND(1.38, 0), ROUND(232.38, -1), ROUND (232.38,-2);
语句执行后,结果如图6-8所示。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P126_11993.jpg?sign=1738848692-qKOMErM4yWuofzrzpQNx8Q9PYFZZ0aX6-0-0c128526861b87df365606d46bfca251)
图6-8 SQL语句执行结果
ROUND(1.38, 1)保留小数点后面1位,四舍五入的结果为1.4;ROUND(1.38, 0)保留小数点后面0位,即返回四舍五入后的整数值;ROUND(23.38, -1)和ROUND (232.38,-2)分别保留小数点左边1位和2位。
提 示
y值为负数时,保留的小数点左边的相应位数直接保存为0,同时进行四舍五入。
6.2.5 符号函数SIGN(x)
SIGN(x)返回参数的符号,x的值为负、零或正时返回结果依次为-1、0或1。
【例6.9】使用SIGN函数返回参数的符号,输入语句如下:
SELECT SIGN(-21),SIGN(0), SIGN(21);
语句执行后,结果如图6-9所示。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P127_12025.jpg?sign=1738848692-xrIePy7dqpZyFk9zZhx7kwca7cneJa2g-0-f1388971c4a66456772c7e8c0fa340d7)
图6-9 SQL语句执行结果
SIGN(-21)返回-1;SIGN(0)返回0;SIGN(21)返回1。
6.2.6 幂运算函数POW(x,y)、POWER(x,y)和EXP(x)
POW(x,y)或者POWER(x,y)函数返回x的y次乘方的结果值。
【例6.10】使用POW和POWER函数进行乘方运算,输入语句如下:
SELECT POW(2,2), POWER(2,2),POW(2,-2), POWER(2,-2);
语句执行后,结果如图6-10所示。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P127_12044.jpg?sign=1738848692-qUbBl25hDTnVg1Ueh31MvEOE4vCDsYCL-0-5a9b7404fdead1a7587ba52e2d3b0054)
图6-10 SQL语句执行结果
可以看到,POW和POWER的结果是相同的,POW(2,2)和POWER(2,2)返回2的2次方,结果都是4;POW(2,-2)和POWER(2,-2)都返回2的-2次方,结果为4的倒数,即0.25。
EXP(x)返回e的x乘方后的值。
【例6.11】使用EXP函数计算e的乘方,输入语句如下:
SELECT EXP(3),EXP(-3),EXP(0);
语句执行后,结果如图6-11所示。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P128_12069.jpg?sign=1738848692-8Rkua2qXGpS3ZlBrVWZUEeUZRsmEB9NN-0-c1c6b8b48174835ddc6d9daf408ddf5d)
图6-11 SQL语句执行结果
EXP(3)返回以e为底的3次方,结果为20.0855369231877;EXP(-3)返回以e为底的-3次方,结果为0.0497870683678639;EXP(0)返回以e为底的0次方,结果为1。
6.2.7 对数运算函数LOG(x)
LOG(x)返回x的自然对数,x相对于基数e的对数。对数定义域不能为负数,因此数组为负数时将会弹出错误信息。
【例6.12】使用LOG(x)函数计算自然对数,输入语句如下:
SELECT LOG(3);
语句执行后,结果如图6-12所示。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P128_12087.jpg?sign=1738848692-QsafGWN876ZTfZ8AG5wIYVSbJztSnjgp-0-6752b3a01383cccf1c6230cd99414e97)
图6-12 SQL语句执行结果
6.2.8 角度与弧度相互转换的函数RADIANS(x)和DEGREES(x)
RADIANS(x)将参数x由角度转化为弧度。
【例6.13】使用RADIANS将角度转换为弧度,输入语句如下:
SELECT RADIANS(90),RADIANS(180);
语句执行后,结果如图6-13所示。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P129_12115.jpg?sign=1738848692-gFyWvhvldAn0bp591AbKCEkGRyFhEqnR-0-ede81667cec273e812757a64e9364a19)
图6-13 SQL语句执行结果
DEGREES(x)将参数x由弧度转化为角度。
【例6.14】使用DEGREES将弧度转换为角度,输入语句如下:
SELECT DEGREES(PI()), DEGREES(PI() / 2);
语句执行后,结果如图6-14所示。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P129_12131.jpg?sign=1738848692-g07046fK4WghQ5dzhc9CKOHdEznZxtOd-0-cbf695ed56f2b5f1c72f68be3c1b9a6e)
图6-14 SQL语句执行结果
6.2.9 正弦函数SIN(x)和反正弦函数ASIN(x)
SIN(x)返回x正弦,其中x为弧度值。
【例6.15】使用SIN函数计算正弦值,输入语句如下:
SELECT SIN(1), ROUND(SIN(PI()));
语句执行后,结果如图6-15所示。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P129_12149.jpg?sign=1738848692-xIJsepVWIDqFSZ5UP30cFW3f7Def11C7-0-58265bac68dee89e5118e7955ef94557)
图6-15 SQL语句执行结果
ASIN(x)返回x的反正弦,即正弦为x的值。若x不在-1到1的范围之内,则会弹出错误信息“输入超出范围”。
【例6.16】使用ASIN函数计算反正弦值,输入语句如下:
SELECT ASIN(0.8414709848078965);
语句执行后,结果如图6-16所示。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P130_12174.jpg?sign=1738848692-haouEZ8olb7JYM8cY1N0JsBNpXfmU6mT-0-574e44bcf7e29148d6d327e0724623aa)
图6-16 SQL语句执行结果
由结果可以看到,函数ASIN和SIN互为反函数。
6.2.10 余弦函数COS(x)和反余弦函数ACOS(x)
COS(x)返回x的余弦,其中x为弧度值。
【例6.17】使用COS函数计算余弦值,输入语句如下:
SELECT COS(0),COS(PI()),COS(1);
语句执行后结果如图6-17所示。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P130_12192.jpg?sign=1738848692-slOpz28wwoL23WVC30RVoSJ2ElecttCe-0-decb31a0739384f053d24124a87c11c3)
图6-17 SQL语句执行结果
由结果可以看到,COS(0)值为1;COS(PI())值为-1;COS(1)值为0.54030230586814。
ACOS(x)返回x的反余弦值,即余弦是x的值。若x不在-1到1的范围之内,则会弹出错误信息。
【例6.18】使用ACOS计算反余弦值,输入语句如下:
SELECT ACOS(1),ACOS(0), ROUND(ACOS(0.5403023058681398));
语句执行后,结果如图6-18所示。
由结果可以看到,函数ACOS和COS互为反函数。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P131_12220.jpg?sign=1738848692-ZyZimIKSYIDgvrJG6xlsXwoRZeCI6Yzw-0-83e58e8fe4cf9f71c925a324b3878b9a)
图6-18 SQL语句执行结果
6.2.11 正切函数、反正切函数和余切函数
TAN(x)返回x的正切,其中x为给定的弧度值。
【例6.19】使用TAN函数计算正切值,输入语句如下:
SELECT TAN(0.3), ROUND(TAN(PI()/4));
语句执行后,结果如图6-19所示。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P131_12238.jpg?sign=1738848692-4cfScqz8VuAGUq0VZDk7CefbspK6uPvd-0-94765178d8d3a3974ec415a9eb873f6c)
图6-19 SQL语句执行结果
ATAN(x)返回x的反正切,即正切为x的值。
【例6.20】使用ATAN函数计算反正切值,输入语句如下:
SELECT ATAN(0.30933624960962325), ATAN(1);
语句执行后,结果如图6-20所示。
由结果可以看到,函数ATAN和TAN互为反函数。
COT(x)返回x的余切。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P132_12263.jpg?sign=1738848692-ZTilcby2D7ZX5YLrz1CEE0Deqt5OxkDi-0-108fc4a29e100008fbc6620dc4551e30)
图6-20 SQL语句执行结果
【例6.21】使用COT()函数计算余切值,输入语句如下:
SELECT COT(0.3), 1/TAN(0.3),COT(PI() / 4);
语句执行后,结果如图6-21所示。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P132_12280.jpg?sign=1738848692-9m6pJgnR5EjKeCijf1XAtjm00babd9Cm-0-e3b265c1a0a3faa9aa874e0b0d74e436)
图6-21 SQL语句执行结果
由结果可以看到,函数COT和TAN互为倒函数。