MySQL—函数

1.定义

函数是指一段可以直接被另一段程序调用的程序或代码。基本分类有字符串函数、数值函数、日期函数、流程函数

2.字符串函数

常见的如下

函数 功能
concat(s1,s2,…sn) 字符串拼接,将s1,s2,…sn拼接成一个字符串
lower(str) 将字符串str全部转化为小写
upper(str) 将字符串str全部转化为大写
lpad(str,n,pad) 左填充,用字符串pad对str的左边进行填充,达到n个字符串长度
rpad(str,n,pad) 右填充,用字符串pad对str的右边进行填充,达到n个字符串长度
trim(str) 去掉字符串头部和尾部的空格
substring(str,start,len) 返回从字符串str从start位置起的len个长度的字符串
3.数值函数

常见的如下

函数 功能
cell(x) 向上取整
floor(x) 向下取整
mod(x,y) 返回x/y的模
rand() 返回0~1内的随机数
round(x,y) 求参数x的四舍五入的值,保留y位小数

案例

通过数据库的函数,生成一个六位数的随机验证码。

1
select lpad(round(rand()*1000000,0),6,'0');
4.日期函数

常见的如下

函数 功能
curdate() 返回当前日期
curtime() 返回当前时间
now() 返回当前日期和时间
year(date) 获取指定date的年份
month(date) 获取指定date的月份
day(date) 获取指定date的日期
date_add(date,interval expr type) 返回一个时期/时间值加上一个时间间隔 expr后的时间值
datediff(date1,date2) 返回起始时间date1和结束时间date2之间的天数

案例

查询所有员工的入职天数,并根据入职天数倒序排序

1
select name,datediff(cuidate(),entrydate) as 'entrydays' from emp order by entrydays desc;
5.流程(控制)函数

可以在SQL语句中实现条件筛选,从而提高语句的效率

函数 功能
if(value,t,f) 如果value为true,则返回t,否则返回f
ifnull(value1,value2) 如果value1不为空,返回value1.否则返回value2
case when [val1] then [res1] …else[default] end 如果val1为true,返回res1,…否则返回default默认值
case [expr] when [val1] then [res1]…else [default] end 如果expr的值等于val1,返回res1,…否则返回default默认值

案例

统计班级各个学员的成绩,展示的规则如下:

大于等于85,展示优秀

大于等于65,展示及格

否则,展示不及格

1
2
3
4
5
6
7
8
create table score(
id int comment 'ID',
name varchar(20) comment '姓名'
math int comment '数学'
english int comment '英语'
chinese int comment '语文'
)comment '学员成绩表';
insert into score(id,name,math,english,chinese) values (1,'Tom',67,88,95),(2,'Rose',23,66,98),(3,'Jack',54,98,76)

先展示分数—等级

1
2
3
4
5
6
7
select
id,
name,
(case when math >= 85 then'优秀’when math >=60 then'及格'else'不及格'end )'数学',
(case when english >= 85 then'优秀’when english >=60 then'及格'else'不及格'end )'英语',
(case when chinese >= 85 then'优秀’when chinese >=60 then'及格’else'不及格'end )'语文'
from scoer