-- SQL函数 --- 字符串函数
-- lower
select lower('Hello');
-- upper
select upper('Hello');
-- lpad => 在01的左边加上'-'使长度 为5
select lpad('01',5,'-');
-- rpad
select rpad('01',5,'-');
-- trim => trim 去掉的是前面和后面的空格 中间的空格还在
select trim(' Hello MySQL');
-- substring =>这里的索引 是从1开始的
select substring('Hello MySQL',1,5);
-- 1.由于业务需求变更,企业员工的工号,统一为5位数,前面不足5位数的全部在前面补0. 比如: 1号员工的应该为00001
update emp set workno =lpad(workno,5,'0');
-- ----- 数值函数
-- ceil 向上取整 1.1 => 2
select ceil(1.1);
-- floor 向下取整 1.1 => 1
select floor(1.1);
-- mod 取余
select mod(5,4); # =>5/4=1...1
select mod(3,4); # =>3/4=0...3
-- rand 随机数
select rand();
-- round 对2.345进行四舍五入 保留两位小数
select round(2.345,2);
-- 生成一个六位数的随机验证码
select lpad(round(rand()*1000000,0),6,'0');
-- ----日期函数
-- 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 day ); -- 从当前往后推 70天
select date_add(now(),interval 70 month ); -- 从当前往后推 70月
select date_add(now(),interval 70 year ); -- 从当前往后推 70年
-- datediff
select datediff('2021-12-01','2021-11-01'); -- 计算两个时间间隔多久
select datediff('2021-10-01','2021-11-01'); -- 计算两个时间间隔多久
-- 案例: 查询所有员工的入职天数,并根据入职天数倒叙排序
select name,datediff(curdate(),entrydate) as 'entrydays' from emp order by entrydays desc ;
-- 流程控制函数
-- if
select if(true,'OK','Error');
-- ifnull
select ifnull('OK','Default'); -- 如果第一个参数 为空 则返回第二个 参数
select ifnull('','Default');
select ifnull(null,'Default');
-- case when then else end
-- 需求:查询emp表的员工姓名和工作地址(北京/上海 --->一线城市 , 其他 ---->二线城市)
select
name,
(case workaddress when '北京' then '一线城市' when '上海' then '一线城市' else '二线城市' end) as '工作地址'
from emp;