目录
窗口函数
是指一段可以直接被另一段程序调用的程序或代码。
也就意味着,这一段程序或代码在
MySQL
中
已经给我们提供了,我们要做的就是在合适的业务场景调用对应的函数完成对应的业务需求即可。
那么,函数到底在哪儿使用呢?
我们先来看两个场景:
-
在企业的
OA
或其他的人力系统中,经常会提供的有这样一个功能,每一个员工登录上来之后都能够看到当前员工入职的天数。
而在数据库中,存储的都是入职日期,如
2000-11-12
,那如果快速计
算出天数呢?
-
在做报表这类的业务需求中
,
我们要展示出学员的分数等级分布。而在数据库中,存储的是学生的
分数值,如
98/75
,如何快速判定分数的等级呢?
其实,上述的这一类的需求呢,我们通过
MySQL
中的函数都可以很方便的实现 。
MySQL
中的函数主要分为以下四类: 字符串函数、数值函数、日期函数、流程函数。
1、
字符串函数
MySQL
中内置了很多字符串函数,常用的几个如下:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
演示如下:
1、concat : 字符串拼接
|
2、lower :
全部转小写
|
3、upper :
全部转大写
|
4、lpad :
左填充
|
5、rpad :
右填充
|
6、trim :
去除空格
|
7、substring :
截取子字符串
|
案例
:
由于业务需求变更,企业员工的工号,统一为
5
位数,目前不足
5
位数的全部在前面补
0
。比如:
1
号员工的工号应该为
00001
。
|
处理完毕后
,
具体的数据为
:
2、
数值函数
常见的数值函数如下:
|
|
|
|
|
|
|
|
|
|
|
|
演示如下:
1、ceil
:向上取整
|
2、floor
:向下取整
|
3、mod
:取模
|
4、rand
:获取随机数
|
5、round:四舍五入
|
案例:
通过数据库的函数,生成一个六位数的随机验证码。
思路: 获取随机数可以通过
rand()
函数,但是获取出来的随机数是在
0-1
之间的,所以可以在其基础上乘以
1000000
,然后舍弃小数部分,如果长度不足
6
位,补
0
|
3、
日期函数
常见的日期函数如下:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
演示如下:
1、curdate
:当前日期
|
2、curtime
:当前时间
|
3、now
:当前日期和时间
|
4、YEAR , MONTH , DAY
:当前年、月、日
|
5、date_add
:增加指定的时间间隔
|
6、datediff
:获取两个日期相差的天数
|
案例:
查询所有员工的入职天数,并根据入职天数倒序排序。
思路: 入职天数,就是通过当前日期
–
入职日期,所以需要使用
datediff
函数来完成。
|
4、
流程函数
流程函数也是很常用的一类函数,可以在
SQL
语句中实现条件筛选,从而提高语句的效率。
|
|
|
|
|
|
|
|
|
|
演示如下:
1、if
|
2、ifnull
|
3、case when then else end
需求
:
查询
emp
表的员工姓名和工作地址
(
北京
/
上海
—->
一线城市
,
其他
—->
二线城市
)
|
案例
:
1、
|
|
具体的
SQL
语句如下
:
|
MySQL
的常见函数我们学习完了,那接下来,我们就来分析一下,在前面讲到的两个函数的案例场景,
思考一下需要用到什么样的函数来实现
?
-
数据库中,存储的是入职日期,如
2000-01-01
,如何快速计算出入职天数呢?
————–
>
答案
:
datediff
-
数据库中,存储的是学生的分数值,如
98
、
75
,如何快速判定分数的等级呢?
————————
>
答案
:
case … when …