函数:是指一段可以直接被另一段程序调用的程序或代码。
1:字符串函数:
- concat :字符串拼接
select concat('hello','Mysql');
-- lower :将字符串转化为小写
select upper('Hello');
-- upper
select upper('Hello');
-- lpad:在01字符串前面添加3个‘-’,字符全部占据5个字符:---01
select lpad('01',5,'-');
-- rpad:在‘01’字符后面添加‘-1’,使其占据5个字符位置:01-1-
select rpad('01',5,'-1');
-- trim :去除头部与尾部的空格,中间的空格不会去除。:Hello Mysql
select trim(' Hello Mysql');
-- substring:返回字符串从其实位置起,len个长度的字符串。
select substring('Hello World',1,5);
-- 由于业务需求变更,企业员工的工号,统一为5位数,不足5位数的前面补0,
update emp set workno=lpad(workno,5,'0');
2:数值函数:
-- ceil 向上取整
select ceil(1.1);
-- floor 向下取整
select floor(1.9);
-- mod:取模
select mod(5,4);
-- rand:取随机数,范围是(0,1);
select rand();
-- round:保留两位小数
select round(2.345,2);
-- 通过数据库函数,生成一个六位数的随机验证码
select lpad(round(rand(),6)*1000000,6,'0');
3:日期函数:
-- 日期函数
-- curdate:显示当前的日期
select curdate();
-- curtime:显示当前的时间
select curtime();
-- now:显示当前的日期加时间
select now();
-- year , month ,day:获取指定日期的年月日
select year(now());
select month(now());
select day(now());
-- date_add:向后推迟时间
select date_add(now(),interval 70 year );
-- datediff:求两个时间的差:第一个-第二个
select datediff(now(),'2021-6-6');
-- 查询所有员工的入职天数,并根据入职天数倒序排序
select name,diff(curdate(),enterdate) as 'enterdays' from emp order by enterdays desc;
4:流程函数
-- 流程控制函数
-- if:如果第一个值为true,返回第二个值,如果第一个值为false,返回第三个值
select if(false,'ok','error');
-- ifnull
select ifnull('','value');-- 返回‘’;
select ifnull('ko','value');-- 返回'value'
select ifnull(null,'value');-- 返回‘value'
-- case when then else end
-- 需求:查询emp的员工姓名和工作地址(将北京,上海改为一线城市,其他为二线城市
select
name,
(case workadress when '北京’ then '一线城市‘ when '北京’ then '一线城市‘ else ’二线城市‘ end) as '工作地址’;
from emp;
--
select
id,
name,
(case when math>=85 then '优秀‘ when math >= 60 then '及格' else '不及格' end) as '数学',
(case when chinese>=85 then '优秀‘ when chinese >= 60 then '及格' else '不及格' end) as '语文',
(case when english>=85 then '优秀‘ when english >= 60 then '及格' else '不及格' end) as '英语',
from emp;