SQL--函数
SQL--函数
函数是什么?
函数是指一段可以直接被另一段程序调用的程序或代码。
字符串函数
select concat('hello','mysql');
select lower('Hello');
select upper('Hello');
select lpad('01',5,'-');
select rpad('01',5,'-');
select trim(' hello mysql ');
select substr('Hello Mysql',1,5);
注意substr中第二项中的下标从1开始,第三个参数为截取的长度
--1,由于业务需求变更,企业员工的工号,统一5位数,目前不足巧位数的全部在前面补0。比如:1号员工的工号应该00001。
update emp set workno =lpad(workno,5,'0');
数值函数
# ceil向上取整
select ceil(1.1);
# floor向下取整
select floor(1.9);
# mod模运算
select mod(7,4);
# rand 生成0-1的随机数
select rand();
# round 四舍五入,保留y位小数
select round(1.878,2);
select round(2.345,2);
select round(2.344,2);
通过数据库的函数,生成一个六位数的随机验证码。
# 通过数据库的函数,生成一个六位数的随机验证码。
# 先生成6位随机数,如过不为6位就在前面或者后面补0
select lpad(round(rand()*1e6,0),6,'0');
日期函数
# ceil向上取整
select ceil(1.1);
# floor向下取整
select floor(1.9);
# mod模运算
select mod(7,4);
# rand 生成0-1的随机数
select rand();
# round 四舍五入,保留y位小数
select round(1.878,2);
select round(2.345,2);
select round(2.344,2);
# 通过数据库的函数,生成一个六位数的随机验证码。
# 先生成6位随机数,如过不为6位就在前面或者后面补0
select lpad(round(rand()*1e6,0),6,'0');
# 日期函数
# curdate 当前日期
select curdate();
# curtime 当前时间
select curtime();
# now 当前的日期加时间
select now();
# year month day
select year(now());
select month(now());
select day(now());
# data_add
# 向后70天
select date_add(now(),interval 70 day );
# 向后70月
select date_add(now(),interval 70 month );
# 向后70年
select date_add(now(),interval 70 year );
# datediff 两个日期之间的差值
# 前面的时间减后面的时间
select datediff('2021-10-01','2021-12-01');
--案例:查询所有员工的入职数,并根据入职天数倒序排序。
select name,datediff(curdate(),entrydate) as entrydays from emp order by entrydays desc ;
流程函数
流程函数也是很常用的一类函数,可以在SQL语句中实现条件筛选,从而提高语句的效率。
统计班级各个学员的成绩,展示的规则如下:
>=85,展示优秀=60,展示及格.否则,展示不及格
# 流程控制函数
# if
select if(true,'ok','error');
select if(false,'ok','error');
# ifnull 判断某个值是否为空
select ifnull('ok','default');
select ifnull(' ','default');
select ifnull(NULL,'default');
# case when then else end
# eee。
# 需求:查em印表的员工姓名和工作地址北京/上海->一线城市,其他->二线城)
select workno , name, case workaddress when '北京' then '一线城市' when '上海' then '一线城市' else '二线城市' end from emp;
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;