当前位置:网站首页>数据库系统原理与应用教程(055)—— MySQL 查询(十七):数学函数的用法
数据库系统原理与应用教程(055)—— MySQL 查询(十七):数学函数的用法
2022-07-26 01:06:00 【睿思达DBA_WGX】
数据库系统原理与应用教程(055)—— MySQL 查询(十七):数学函数的用法
目录
查询时使用函数可以构造更加灵活的查询条件,MySQL 提供了处理数值型数据的函数。
一、取整函数
使用 CEILING() 和 FLOOR() 函数可以对一个数值进行取整操作。
语法格式如下:
CEILING(X) -- 返回大于或等于 X 的最小整数
FLOOR(X) -- 返回小于或等于 X 的最大整数
例如:
mysql> select ceiling(2.001),ceiling(-2.99) from dual;
+----------------+----------------+
| ceiling(2.001) | ceiling(-2.99) |
+----------------+----------------+
| 3 | -2 |
+----------------+----------------+
1 row in set (0.01 sec)
mysql> select floor(2.898),ceiling(-2.001) from dual;
+--------------+-----------------+
| floor(2.898) | ceiling(-2.001) |
+--------------+-----------------+
| 2 | -2 |
+--------------+-----------------+
1 row in set (0.00 sec)
二、保留小数位函数
1、ROUND() 函数
对一个数值进行四舍五入操作。
语法格式如下:
ROUND(x) -- 对 x 进行四舍五入取整
ROUND(x,n) -- 对 x 进行四舍五入,保留 n 位小数。如果 n 小于 0,则对整数位四舍五入
-- 比如 n = -2,对百位数四舍五入
例如:
mysql> set @val = 1258.6987;
Query OK, 0 rows affected (0.00 sec)
mysql> select round(@val),round(@val,2),round(@val,-2) from dual;
+-------------+---------------+----------------+
| round(@val) | round(@val,2) | round(@val,-2) |
+-------------+---------------+----------------+
| 1259 | 1258.70 | 1300 |
+-------------+---------------+----------------+
1 row in set (0.00 sec)
2、FORMAT() 函数
把某个数值进行四舍五入后返回,返回结果的类型为字符串。
语法格式如下:
-- 对数值 x 进行四舍五入运算,保留 d 为小数,返回值为一个字符串
-- 该函数的功能和 ROUND() 函数类似,只是返回值的类型不同
FORMAT(x,d)
例如:
mysql> set @val = 1258.6987;
Query OK, 0 rows affected (0.00 sec)
mysql> select FORMAT(@val,2),FORMAT(@val,-2) from dual;
+----------------+-----------------+
| FORMAT(@val,2) | FORMAT(@val,-2) |
+----------------+-----------------+
| 1,258.70 | 1,259 |
+----------------+-----------------+
1 row in set (0.00 sec)
3、TRUNCATE() 函数
把一个数值截取 n 位小数,并且不进行四舍五入。
语法格式如下:
-- 把数值 x 的小数点后第 n 位之后的数据直接舍去(不四舍五入),保留 n 为小数
TRUNCATE(x,n)
例如:
mysql> set @val = 1258.6987;
Query OK, 0 rows affected (0.00 sec)
mysql> select TRUNCATE(@val,2),TRUNCATE(@val,-2) from dual;
+------------------+-------------------+
| TRUNCATE(@val,2) | TRUNCATE(@val,-2) |
+------------------+-------------------+
| 1258.69 | 1200 |
+------------------+-------------------+
1 row in set (0.00 sec)
三、生成随机数函数
RAND() 函数用于生成一个随机数。
语法格式如下:
-- RAND() 函数可以产生一个0到1之间的随机数
-- 如果无参数,每次运行都会产生一个不同的随机数
-- 如果指定了种子 n,则每次运行时产生的随机数相同
-- 根据 RAND() 函数的特征,要生成一个 m 到 n(m < n)之间的随机数,可以采用如下公式:
-- m + (n - m) * rand()
RAND(n)
RAND()
例如:
(1)基本用法
mysql> select rand(),rand(),rand() from dual;
+-------------------+-------------------+-------------------+
| rand() | rand() | rand() |
+-------------------+-------------------+-------------------+
| 0.412546113517644 | 0.331325095455465 | 0.418987167458038 |
+-------------------+-------------------+-------------------+
1 row in set (0.00 sec)
mysql> select rand(1),rand(1),rand(1) from dual;
+---------------------+---------------------+---------------------+
| rand(1) | rand(1) | rand(1) |
+---------------------+---------------------+---------------------+
| 0.40540353712197724 | 0.40540353712197724 | 0.40540353712197724 |
+---------------------+---------------------+---------------------+
1 row in set (0.00 sec)
(2)创建表 t21,在 salary 列中输入5000 到 15000 之间的随机数,保留两位小数
/* create table t31(id int priamry key,name char(20),salary decimal(10,4)); insert into t31 values(1,'Jack',round(5000 + 10000 * rand(),2)); insert into t31 values(2,'Tom',round(5000 + 10000 * rand(),2)); insert into t31 values(3,'Mark',round(5000 + 10000 * rand(),2)); insert into t31 values(4,'Kate',round(5000 + 10000 * rand(),2)); insert into t31 values(5,'Jerry',round(5000 + 10000 * rand(),2)); insert into t31 values(6,'Black',round(5000 + 10000 * rand(),2)); insert into t31 values(7,'White',round(5000 + 10000 * rand(),2)); */
mysql> create table t31(id int primary key,name char(20),salary decimal(10,4));
Query OK, 0 rows affected (0.01 sec)
mysql> select * from t31;
+----+-------+------------+
| id | name | salary |
+----+-------+------------+
| 1 | Jack | 6009.6100 |
| 2 | Tom | 7478.4100 |
| 3 | Mark | 14363.2500 |
| 4 | Kate | 14381.0300 |
| 5 | Jerry | 13815.3900 |
| 6 | Black | 10933.8600 |
| 7 | White | 8223.1100 |
+----+-------+------------+
7 rows in set (0.00 sec)
四、算术计算类函数
1、求绝对值函数
ABS() 函数用于求一个数值的绝对值。
语法格式如下:
ABS(n)
例如:查询学生的年龄。
mysql> select s_id,s_name,abs(datediff(birth,now())/365) age
from student;
+-------+-----------+---------+
| s_id | s_name | age |
+-------+-----------+---------+
| S2011 | 张晓刚 | 22.6521 |
| S2012 | 刘小青 | 22.7973 |
| S2013 | 曹梦德 | 24.4548 |
| S2014 | 刘艳 | 24.0959 |
| S2015 | 刘艳 | 23.0630 |
| S2016 | 刘若非 | 21.9068 |
| S2021 | 董雯花 | 21.9945 |
| S2022 | 周华建 | 23.1781 |
| S2023 | 特朗普 | 23.1041 |
| S2024 | 奥巴马 | 21.7781 |
| S2025 | 周健华 | 21.9315 |
| S2026 | 张学有 | 24.0630 |
| S2031 | 李明博 | 22.7562 |
| S2032 | 达芬奇 | 22.5753 |
+-------+-----------+---------+
14 rows in set (0.00 sec)
2、SQRT() 函数
求一个数的平方根。
语法格式如下:
SQRT(x)
例如:
mysql> SELECT SQRT(16),SQRT(10) from dual;
+----------+--------------------+
| SQRT(16) | SQRT(10) |
+----------+--------------------+
| 4 | 3.1622776601683795 |
+----------+--------------------+
1 row in set (0.00 sec)
3、POWER() 函数
计算一个数的若干次幂。
语法格式如下:
-- 返回 x 的 y 次方
POWER(x,y)
例如:
mysql> SELECT POWER(2,10),POWER(16,-0.5),POWER(4,1.2) from dual;
+-------------+----------------+-------------------+
| POWER(2,10) | POWER(16,-0.5) | POWER(4,1.2) |
+-------------+----------------+-------------------+
| 1024 | 0.25 | 5.278031643091577 |
+-------------+----------------+-------------------+
1 row in set (0.01 sec)
4、MOD() 函数
进行求余操作。
语法格式如下:
-- 返回 m 除以 n 的余数。
MOD(m,n)
例如:
mysql> SELECT MOD(10,3),MOD(10,-3),MOD(-10,3),MOD(-10,-3) from dual;
+-----------+------------+------------+-------------+
| MOD(10,3) | MOD(10,-3) | MOD(-10,3) | MOD(-10,-3) |
+-----------+------------+------------+-------------+
| 1 | 1 | -1 | -1 |
+-----------+------------+------------+-------------+
1 row in set (0.00 sec)
5、EXP() 函数
返回常数 e 的若干次幂。
语法格式如下:
-- 返回 e 的 X 次方
EXP(X)
例如:
mysql> SELECT EXP(0),EXP(1),EXP(2) from dual;
+--------+-------------------+------------------+
| EXP(0) | EXP(1) | EXP(2) |
+--------+-------------------+------------------+
| 1 | 2.718281828459045 | 7.38905609893065 |
+--------+-------------------+------------------+
1 row in set (0.02 sec)
6、求对数函数
语法格式如下:
LN(X) -- 返回 X 的自然对数(以 e 为底的对数)
LOG(X) -- 返回 X 的自然对数
LOG(n,x) -- 返回以 n 为底的对数
LOG2(x) -- 返回以 2 为底的对数
LOG10(x) -- 返回以 10 为底的对数
例如:
mysql> SELECT LN(10),LOG(10),ln(exp(2)) from dual;
+-------------------+-------------------+------------+
| LN(10) | LOG(10) | ln(exp(2)) |
+-------------------+-------------------+------------+
| 2.302585092994046 | 2.302585092994046 | 2 |
+-------------------+-------------------+------------+
1 row in set (0.02 sec)
mysql> SELECT LOG(2,1024),LOG2(1024),LOG10(1000) from dual;
+-------------+------------+-------------+
| LOG(2,1024) | LOG2(1024) | LOG10(1000) |
+-------------+------------+-------------+
| 10 | 10 | 3 |
+-------------+------------+-------------+
1 row in set (0.01 sec)
7、PI() 函数
返回圆周率。
语法格式如下:
-- 此函数没有参数
PI()
例如:
mysql> SET @r = 5;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT PI() pi, @r radius, 2 * PI() * @r perimeter,PI() * POWER(@r, 2) area
from dual;
+----------+--------+-----------+-------------------+
| pi | radius | perimeter | area |
+----------+--------+-----------+-------------------+
| 3.141593 | 5 | 31.415927 | 78.53981633974483 |
+----------+--------+-----------+-------------------+
1 row in set (0.01 sec)
8、三角函数
三角函数的语法格式如下:
-- X 表示弧度
SIN(X) --正弦函数
COS(X) --余弦函数
TAN(X) --正切函数
COT(X) --余切函数
例如:
mysql> SELECT SIN(pi()/2) sin, COS(pi()/6) cos, TAN(pi()/2) tan, COT(pi()/3) cot
from dual;
+------+--------------------+----------------------+-------------------+
| sin | cos | tan | cot |
+------+--------------------+----------------------+-------------------+
| 1 | 0.8660254037844387 | 1.633123935319537e16 | 0.577350269189626 |
+------+--------------------+----------------------+-------------------+
1 row in set (0.04 sec)
边栏推荐
- Open download! Alibaba Devops Practice Manual
- 用 QuestPDF操作生成PDF更快更高效!
- 编程学习过程中有哪些快速提高编程技巧的方法?
- [RTOS training camp] GPIO knowledge and preview arrangement + evening class questions
- How to copy and paste QT? (QClipboard)
- [RTOS training camp] course learning methods and structural knowledge review + linked list knowledge
- 数据写入excel并填充颜色
- [RTOS training camp] ring buffer, at instruction, preview arrangement and evening class questions
- SQL statement exercise
- We have no way out
猜你喜欢

【RTOS训练营】作业讲解、队列和环形缓冲区、队列——传输数据、队列——同步任务和晚课提问

【RTOS训练营】课程学习方法和C语言知识(指针、结构体、函数指针、链表)和学员问题
![[RTOS training camp] program framework, preview, after-school homework and evening class questions](/img/ce/ae35acf14519f6856ba2d181ee7201.jpg)
[RTOS training camp] program framework, preview, after-school homework and evening class questions
![[RTOS training camp] equipment subsystem, questions of evening students](/img/12/20fc69b5faf4c2d6dfaacde8142e33.jpg)
[RTOS training camp] equipment subsystem, questions of evening students

How does the proxy IP server ensure its information security in the network

ASP. Net core configuration

How to choose social e-commerce model in the early stage? Taishan crowdfunding

健身房一年关店8000家,逆势盈利的工作室是怎么开的?
![[RTOS training camp] course learning methods and C language knowledge (pointer, structure, function pointer, linked list) and student questions](/img/c4/b7ddf5527c27892676b50d2b873220.jpg)
[RTOS training camp] course learning methods and C language knowledge (pointer, structure, function pointer, linked list) and student questions

985 associate professors in Colleges and universities sun their annual salary, and the provident fund tops the monthly salary of ordinary people. Netizen: it is worthy of being in Shanghai
随机推荐
Openvino installation pit notes
The bumpy road of referencing jar package json-path.jar in jmeter/idea
[CTF] crypto preliminary basic outline
Working principle of ZK rollups
【RTOS训练营】程序框架、预习、课后作业和晚课提问
Selenium assertion and JS actuator
Zabbix监控主机及资源告警
Set set learning
Implementation process of adding loading effect to easycvr page
Paged query design of scenarios
[RTOS training camp] continue the program framework, tick interrupt supplement, preview, after-school homework and evening class questions
Inverse matrix block matrix
[Code] refers to the repeated number in the offer 03 array
jupyter更改默认浏览器的方法
[RTOS training camp] I2C and UART knowledge and preview arrangement + evening class questions
Using questpdf operation to generate PDF is faster and more efficient!
《暗黑破坏神:不朽》手游如何多开搬砖及新手入门搬砖攻略
1.30 升级bin文件添加后缀及文件长度
Talk about "people" in the R & D team
阿明的告白