当前位置:网站首页>数据库系统原理与应用教程(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)
边栏推荐
猜你喜欢

【RTOS训练营】站在更高的角度学习C语言

jupyter更改主界面并且导入数据集

Lua基础语法

The difference and application of in and exists in SQL statement

动态IP地址是什么?为什么大家会推荐用动态ip代理?
![[RTOS training camp] equipment subsystem, questions of evening students](/img/12/20fc69b5faf4c2d6dfaacde8142e33.jpg)
[RTOS training camp] equipment subsystem, questions of evening students

C language_ The use and implementation of string comparison function StrCmp

Jupyter changes the main interface and imports the dataset

健身房一年关店8000家,逆势盈利的工作室是怎么开的?
![[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
随机推荐
Openvino installation pit notes
El table scroll bar settings
Optimization of tableview
Implementation process of adding loading effect to easycvr page
How does the proxy IP server ensure its information security in the network
el-table滚动条设置
【ctf】Crypto初步基础概要
pip install --upgrade can‘t find Rust compiler
Unityvr -- robot arm scene 4- gifts and Christmas tree
《nlp入门+实战:第四章:使用pytorch手动实现线性回归 》
MySQL pymysql operation
How to choose social e-commerce model in the early stage? Taishan crowdfunding
【软件开发规范四】《应用系统安全编码规范》
The task will be launched before the joint commissioning of development
Data is written into excel and filled with color
Android SQLite first groups and then sorts left concatenated queries
If the native family is general, and the school is also a college on the rotten street, how to go on the next journey
[RTOS training camp] task scheduling (Continued), task comity, scheduling summary, queue and evening class questions
Diablo: immortality mobile game how to open more brick moving and novice introduction brick moving strategy
The difference and application of in and exists in SQL statement