一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第21天,点击查看活动详情。
前言
上篇我们做了一些多表查询的练习。有兴趣的小伙伴可以阅读(# MySQL学习-多表查询(八))。
下面继续学习MySQL中的函数。
函数定义
函数,在java开发中又被叫做方法,我们都很熟悉。它把我们经常使用的代码封装起来,需要的时候直接调用即可。这样既提高了代码效率,又提高了可维护性。在SQL中我们也可以使用函数对检索出来的数据进行函数操作。使用这些函数,可以极大地提高用户对数据库的管理效率。
从函数定义的角度出发,我们可以将函数分为内置函数和自定义函数。
不同DBMS函数的差异
DBMS之间的差异性很大,远大于同一语言不同版本之间的差异。实际上,只有很少的函数是被DBMS同时支持的。比如:大多数DBMS使用(||)或者(+)来做拼接符,而在MySQL中的字符串拼接函数为concat()。大部分DBMS会有自己特定的函数,这就意味着采用SQL函数的代码可移植性是很差的,因此在使用函数时需要特别注意。
MySQL的内置函数
MySQL提供的内置函数从实现的功能角度可以分为数值函数、字符串函数、日期和时间函数、流程控制函数、加密和解密函数、获取MySQL信息函数,聚合函数等。这里,将这些丰富的内置函数再分为两类:单行函数、聚合函数(或分组函数,或分组函数)。
单行函数
- 操作数据对象
- 接受参数返回一个结果
- 只对一行进行变换
- 每行返回一个结果
- 可以嵌套
- 参数可以是一列或一个值
数值函数
基本函数
| 函数 | 用法 |
|---|---|
| ABS(x) | 返回x的绝对值 |
| SIGN(x) | 返回x的符号。正数返回1,负数返回-1,0返回0 |
| PI() | 返回圆周率的值 |
| CEIL(x),CEILING(x) | 返回大于或等于某个值的最小整数 |
| FLOOR(x) | 返回小于或等于某个值的最大整数 |
| LEAST(e1, e2, e3...) | 返回列表中的最小值 |
| GREATEST(e1, e2, e3...) | 返回列表中的最大值 |
| MOD(x, y) | 返回x除以y后的余数 |
| RAND() | 返回0-1的随机值 |
| RAND(x) | 返回0-1的随机值,其中x的值用作种子值,相同的x值会产生相同的随机数 |
| ROUND(x) | 返回一个对x的值进行四舍五入后,最接近于x的整数 |
| ROUND(x, y) | 返回一个对x的值进行四舍五入后,最接近于x的值,并保留小数点后面Y位 |
| TRUNCATE(x, y) | 返回数字x截断为y位小数的结果 |
| SQRT(x) | 返回x的平方根。当x的值为负数时,返回NULL |
示例一
SELECT ABS(-123), ABS(32), SIGN(-23), SIGN(43), PI()
FROM DUAL
得出结果如下:
| ABS(-123) | ABS(32) | SIGN(-23) | SIGN(43) | PI() |
|---|---|---|---|---|
| 123 | 32 | -1 | 1 | 3.141593 |
上面演示了一些函数的运算,都好理解。
示例二
SELECT CELL(32.32), CEILING(-43.23), FLOOR(32.32),
FLOOR(-43.23), MOD(12, 5)
FROM DUAL
得出结果如下:
| CELL(32.32) | CEILING(-43.23) | FLOOR(32.32) | FLOOR(-43.23) | MOD(12, 5) |
|---|---|---|---|---|
| 33 | -43 | 32 | -44 | 2 |
CELL或者CEILING返回大于等于32.32的值中最小的整数,也就是33。
大于等于-43.23的最小整数也就是-43。
FLOOR返回小于等于32.32的值中最大的整数,也就是32。
小于等于-43.23的最大整数,也就是-44。
MOD返回12除以5的余数,也就是2。
今天先学到这里,明天继续。