MySQL中的函数主要分为以下四类: 字符串函数数值函数日期函数流程函数

3.1 字符串函数

MySQL中内置了很多字符串函数,常用的几个如下:

1)concat : 字符串拼接

select concat('Hello','MySQL');

2)lower : 全部转小写

select lower('MySQL');

3)upper : 全部转大写

select upper('MySQL');

4)lpad : 左填充

select lpad('MySQL',10,'-');

5)rpad : 右填充

select rpad('MySQL',10,'-');

6)trim : 去除空格

select trim('  MySQL  ');

7)substring : 截取子字符串

select  substring('Hello MySQL',1,5);

案例

例:由于业务需求变更,企业员工的工号,统一为5位数,目前不足5位数的全部在前面补0。比如: 1号员工的工号应该为00001
update emp set workno = lpad(workno,5,'0');


2 数值函数

常见的数值函数如下:

1)ceil:向上取整

select ceil(1.1);

2)floor:向下取整

select floor(1.9);

3)mod:取模

select mod(7,4);

4)rand:获取随机数

select rand();

5)round:四舍五入

select round(4.336,2);

案例

例:通过数据库的函数,生成一个六位数的随机验证码。
思路: 获取随机数可以通过rand()函数,但是获取出来的随机数是在0-1之间的,所以可以在其基础上乘以1000000,然后舍弃小数部分,如果长度不足6位,补0
select lpad(round( rand()*1000000,0 ), 6, '0');


3 日期函数

常见的日期函数如下:

1)curdate:当前日期

select curdate();

2)curtime:当前时间

select curtime();

3)now:当前日期和时间

select now();

4)YEAR , MONTH , DAY:当前年、月、日

select YEAR(now());
select MONTH(now());
select DAY(now());



5)date_add:增加指定的时间间隔

select date_add('2022-1-1', INTERVAL 5 DAY);

6)datediff:获取两个日期相差的天数

select datediff('2022-1-20','2022-1-1');

案例

例:查询所有员工的入职天数,并根据入职天数倒序排序。
思路: 入职天数,就是通过当前日期 - 入职日期,所以需要使用datediff函数来完成。
select name,datediff(curdate(), entrydate) as '入职天数' from emp order by entrydate asc;


4 流程函数

流程函数也是很常用的一类函数,可以在SQL语句中实现条件筛选,从而提高语句的效率。

1)if

select if(false,'ok','error');

2)ifnull

select ifnull('ok','default');
select ifnull('','default');
select ifnull(null,'default');


3)case when then else end

select
       name,
       (case workaddress when '北京' then '一线城市' when '上海' then '一线城市' else '二线城市' end) as '工作地址'
from emp;

案例

// 准备的数据
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, 90),(3, 'Jack', 56, 98, 76);
例:查询学生各个科目成绩的情况,并根据成绩划分等价,>=85为优秀,<60为不及格,>=60&&<85为及格
select
       id,
       name,
       (case when math>=85 then '优秀' when math <60 then '不及格' else '及格' end) as '数学',
       (case when english>=85 then '优秀' when english <60 then '不及格' else '及格' end) as '英语',
       (case when chinese>=85 then '优秀' when chinese <60 then '不及格' else '及格' end) as '数学'
from score;