很多东西,你肯等,它就会来
------ 24.3.5
函数
函数是指一段可以直接被另一段程序调用的程序或代码
1.字符串函数
常见的字符串函数
函数 功能
concat(S1,S2,...Sn) 字符串拼接,将S1,S2,Sn拼接成一个字符串
lower(str) 将字符串str全部转为小写
upper(str) 将字符串str全部转为大写
lpad(str,n,pad) 左填充,用字符串pad对str的左边进行填充,达到n个字符串长度
rpad(str,n,pad) 右填充,用字符串pad对str的右边进行填充,达到n个字符串长度
trim(str) 去掉字符串头部和尾部的空格
substring(str,start,len) 返回从字符串str从start位置起的len个长度的字符串
语法:
select 函数(参数)
示例:
1.-- concat
sqlselect concat('Hello','MySQL');
HelloMySQL
2.-- lower
sqlselect lower('Hello');
hello
3.-- upper
sqlselect upper('Hello');
HELLO
4.-- lpad
sqlselect lpad('01',5,'*');
***01
5.-- rpad
sqlselect rpad('01',5,'*');
01***
6.-- trim
sqlselect trim(' 一切都会好的 我一直相信 ');
一切都会好的 我一直相信
7.-- substring
sqlselect substring('一切都会好的 我一直相信',4,9);
会好的 我一直相信
案例:
由于业务逻辑需要,企业员工的工号,统一为五位数,不足五位数的用0补齐,例如:一号员工能够工号为00001
sqlupdate emp set workno = lpad(workno,5,'0');
2.数值函数
常见的数值函数如下:
函数 功能
ceil(x) 向上取整
floor(x) 向下取整
mod(x,y) 返回x/y的模
rand() 返回0~1之间的随机数
round(x,y) 求参数x的四舍五入的值,保留y位小数
示例:
1.-- ceil(x)
sqlselect ceil(2.7);
3
2.-- floor(x)
sqlselect floor(2.7);
2
3.-- mod(x,y)
sqlselect mod(9,2);
1
4.-- rand()
sqlselect rand();
5.round(x,y)
sqlselect round(2.356,2);
2.36
练习
通过数据库的函数,生成一个六位数的随机验证码
sqlselect lpad(round(rand()*100000,0),6,'0'));
3.日期函数
常见的日期函数如下:
函数 功能
curdate() 返回当前日期
curtime() 返回当前时间
now() 返回当前日期和时间
year(date) 获取指定date的年份
month(date) 获取指定date的月份
day(date) 获取指定date的日期
date_add(date,interval expr type) 返回一个日期/时间值加上一个时间间隔expr后的时间值
datediff(date1,date2) 返回起始时间date1和结束时间date2之间的天数
示例:
1.-- curdate()
sqlselect curdate();
2.-- curtime()
sqlselect curtime();
3.-- now()
sqlselect now();
4.-- year() 5.-- month() 6.-- day()
sqlselect year(now()); select month(now()); select day(now());
7.-- date_add()
sqlselect date_add(now(),interval,70 day); select date_add(now(),interval,70 month); select date_add(now(),interval,70 year);
8.-- datediff()
sqlselect datediff('2021-07-23','2024-3-5');
在求两日期差时,datediff()函数是用前面的日期-后面的日期数
案例:
查询所有员工的入职天数,并根据入职天数排序
sqlselect name, datediff(curdate(),entrydate) as entrydays from emp order by entrydays desc;
4.流程函数
流程函数也是很常用的一类函数,可以在SQL语句中实现条件筛选,从而提高 语句的效率
函数 功能
if(value,t,f) 如果value为true,则返回t,否则返回f
ifnull(value1,value2) 如果value1不为空,返回value1,否则返回value2
case when [val1] then [res1] ...else [default] end 如果val1为true,返回res1,否则返回default默认值
case [expr] when [val1] then [res1] ... else [default] end 如果expr的值等于vall,返回res1,...否则返回default默认值
示例:
1.-- if(value,t,f)
sqlselect if(false,'ok','error');
2.-- ifnull(value1,value2)
sqlselect ifnull(null,'error');
error
3.case when [val1] then [res1] ...else [default] end
sqlselect name,(case workaddress when '北京' then '一线城市' when '上海' then '一线城市' else '二线城市') as '工作地址' from emp;
案例:
统计班级各个学员的成绩,展示的规则如下:
>=85,展示优秀
>=60,展示及格
否则,展示不及格
sqlselect id,name,(case when math >= 85 then '优秀' when math >= 60 then '及格' else '不及格') as '数学成绩',(case when chinese >= 85 then '优秀' when chinese >=60 then '及格' else '不及格') as '语文成绩',(case when english>=85 then '优秀' when english >=60 then '及格' else '不及格') as '英语成绩' from score;