还记得在SQL语句中所使用的聚合函数吗?同样的在mysql中也内置了许多可以直接拿来调用的函数,在函数篇里将会一一进行介绍。
字符串函数
一些常用的字符串函数如下:
语法很简单,直接在select后面加上要使用的函数即可。
比如:
拼接字符串
select concat('Hello', 'MySQL')
左填充字符串
select lpad('01', 5, '-')
运行结果为:---01
截取字符串
select substring('Hello MySQL', 1, 5)
注意不同于Java,这里的起始索引值是从1开始的,所以运行结果就是Hello。
案例:将emp表中所有员工的工号改成5位数,前面补0。
update emp set workno = lpad(workno, 5, '0')
因为是更新数据,所以使用update函数,再根据对应的语法将字符串函数应用进去即可。
数值函数
一些常见的数值函数如下:
比如:
取模运算
select mod(7, 4)
运行结果为3。
四舍五入
select round(2.345, 2)
运行结果为2.35。
案例:生成一个六位数的随机码。
分析:首先随机用rand(),但是只能生成0-1的随机数,所以要*1000000。后面的小数不需要,所以用round保留0位小数,还需要注意*1000000的数并不一定是6位数,可能是5位,4位甚至更少,那么需要用lpad或者rpad补齐6位数,这里可以选择补0。
select rpad(round(rand() * 1000000, 0), 6, '0')
于是乎用一句话就完成了6位数验证码的生成。
日期函数
一些常见的日期函数如下:
比如:
获得当前时间的日期:
select YEAR(now())
当前时间+500个月:
select date_add(now(), INTERVAL 500 MONTH)
案例:查询所有员工的入职天数,并且按照入职天数倒序排序。
select name, datediff(curdate(), emp.entrydate) '入职天数' from emp order by '入职天数' desc
核心在于使用了datediff来求取当前时间和入职时间的差值。
流程函数
一些常用的流程函数如下:
比如:
查询emp表中的员工姓名和工作地址,如果工作地址为北京或者上海,则显示一线城市,其他均显示为二线城市。
select
name,
case emp.workaddress when '北京' then '一线城市' when '上海' then '一线城市' else '二线城市' end as '工作地址'
from emp
关键词为case when then else end。用的是第四种语句。
案例:现有表如下,要求分数>=85显示优秀,>=60显示及格,其余显示不及格。
select
score.id,
score.name,
case when score.math >= 85 then '优秀' when score.math >= 60 then '及格' else '不及格' end '数学成绩',
case when score.english >= 85 then '优秀' when score.english >= 60 then '及格' else '不及格' end '英语成绩',
case when score.chinese >= 85 then '优秀' when score.chinese >= 60 then '及格' else '不及格' end '语文成绩'
from score
这里因为有条件判断语句,所以使用第三种流程函数。输出结果如下。
至此MySQL函数篇就完结了,阶段性成果+1!!!