函数
有下面两种场景:
1.数据库表中,存储的是入职日期,如2000-11-12,如何快速计算入职天数?
2.数据库表中,存储的是学生的分数值,如98,75,如何快速判定分数的等级呢?
其实这些场景都需要用到函数,MySQL数据库中函数是其内置的一段程序代码,函数可以再另一段程序中调用
字符串函数
注意:
1.SubString函数截取子字符串的起始索引从1开始
2.trim函数只会消除字符串两边的空格,注意是空格不是所有的空字符串
补充:
1.length(str):求str的长度
2.left(str, 5):截取str左边长度为5的子字符串
3.right(str, 6):截取str右边长度为6的子字符串
4.group_concat([distinct] 字段A [order by 字段A] separator ‘;’):连接经过排序后的字段A的所有值,并用’;’分隔,默认使用逗号分隔并按升序排序值,常用搭配group by使用,用于连接组内各值
5.substring_index(str, delimiter, n):如果n>0,获取左 –> 右第n个分隔符左边的所有字符,不包含该分隔符,如果n<0,获取右 –> 左第n个分隔符右边的所有字符,不包含该分隔符
数值函数
常见的数值函数:
案例:随机生成6位的验证码
1
2
select lpad(round(rand()*1000000), 6, 0);
select lpad(substring(rand(),3,6),6,0);
注意:Mod(x,y)就是求x/y的余数
日期函数
常见的日期函数:
date_add演示:
当前日期往后推70天:date_add(now(),interval 70 day);,其中interval是固定写法
案例:查询员工的入职天数,并倒序排序
1
select name, datediff(curdate(), entrydate) as 'entrydays' from emp order by entrydays desc;
注意:
1.datediff()会有日期格式检查,如果日期格式不正确会返回null
2.datediff的值是由前一个参数减后一个参数得到的,并且返回的是day类型,虽然参数可以是datetime类型的,但time部分不会参与计算
流程函数
流程函数可以用于按条件筛选,常见流程函数:
案例1:查询emp表的员工姓名和工作地址(北京/上海 —-> 显示一线城市,其他 —-> 二线城市)
1
select name, (case workaddress when '北京' then '一线城市' when '上海' then '一线城市' else '二线城市' end) as '工作地址' from emp;
这个查询很像switch
案例2:统计班级各个学员的成绩,展示的规则如下:
1.>=85,展示优秀
2.>=60,展示及格
3.否则展示不及格
1
2
3
4
5
6
7
select
id,
name,
(case when math >= 85 then '优秀' when math >= 65 then '及格' else '不及格' end) as '数学',
(case when english >= 85 then '优秀' when english >= 65 then '及格' else '不及格' end) as '英语',
(case when chinese >= 85 then '优秀' when chinese >= 65 then '及格' else '不及格' end) as '英语'
from score;
这个查询很像if/else if:
总结:两种case语句都是对字段值进行筛选并返回对应的值,所以case语句通常是有效的可以select