一.字符串函数
1.CONCAT(S1,S2,···Sn):字符串拼接,将S1,S2,···Sn拼接成一个字符串
select concat('Hello','MySQL');
HelloMySQL
2.LOWER(str):将字符串str全部转为小写
select lower('Hello');
hello
3.UPPER(str):将字符串str全部转为大写
select upper('Hello');
HELLO
4.LPAD(str,n,pad):左填充,用字符串pad对str的左边进行填充,达到n个字符串长度
select lpad('01',5,'-');
---01
5.RPAD(str,n,pad):右填充,用字符串pad对str的右边进行填充,达到n个字符串长度
select rpad('01',5,'-');
01---
6.TRIM(str):去掉字符串头部和尾部的空格
select trim(' hello world ');
hello world
7.SUBSTRING(str,start,len):返回从字符串str从start位置起的len个长度的字符串
select substring('helloworld',1,5);
hello(第一个字符的索引为1)
二.数值函数
1.ceil:向上取整
select ceil(1.5);
2
2.floor:向下取整
select floor(1.2);
1
3.mod:取模运算
select mod(3,2);
1
4.rand:生成0-1之间的一个随机数
select rand();
0.21363859643567223
5.round(x,y):对x小数点后y位进行四舍五入
select round(2.34,2);
select round(2.345,1);
2.34
2.3
练习:
通过数据库函数,生成一个六位数的随机验证码
select lpad(round(rand()*1000000,0),6,'0');
-- 1.先生成一个0-1之间的随机数,然后再乘以1000000变成一个<=6位的数字
-- 2.然后四舍五入去掉小数部分
-- 3.再进行左填充(或右填充),长度设置位6位,不够的位上补0
三.时间函数
1.CURDATE():返回当前日期
select curdate();
2023-06-01
2.CURTIME():返回当前时间
select curtime();
22:05:28
3.NOW():返回当前日期和时间
select now();
2023-06-01 22:05:48
4.YEAR(DATE):获取指定date的年份
select year(now());
2023
5.MONTH(DATE):获取指定date的月份
select month(now());
6
6.YEAR(DATE):获取指定date的年份
select year(now());
1
7.DATE_ADD(date,INTERVAL expr type):返回一个日期/时间值加上一个时间间隔expr后的时间值
select date_add('2021-10-21',INTERVAL 70 day);
2021-12-30
select date_add('2021-10-21',INTERVAL 70 MONTH );
2027-08-21
select DATE_ADD('2021-10-21',INTERVAL 70 YEAR );
2091-10-21
8.DATEDIFF(date1,date2):返回起始时间date1和结束时间date2之间的天数
select datediff('2011-2-11','2000-3-4'); # date1 - date2
3996
select datediff('2011-2-11','2021-3-4');
-3674
四.流程函数
1.IF(value,t,f) 如果value为true,则返回t,否则返回f
select if(true,'hello','world');
select if('1',2,3);
select if(false,0,1);
hello,2,0
2.IFNULL(value1,value2) 如果value1不为空则返回value1,否则返回value2
select ifnull(null,1);
select ifnull(1,2);
select ifnull('ok','default');
select ifnull('','default'); # 空字符串并不代表null
1,1,default,
3.CASE WHEN[val1] THEN[res1] ... ELSE[default] END ;如果val1为true,返回res1,...否则返回default默认值
-- >=85,展示优秀;>=60,展示及格;否则,展示不及格
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;
4.CASE[expr] WHEN[val1] THEN[res1] ...ELSE[default] END 如果expr的值等于val1,返回res1,...否则返回default默认值
-- 需求:查询emp表中的员工姓名和工作地址(北京/上海-->一线城市,其他-->二线城市)
select name,workaddress,
(case workaddress when '北京' then '一线城市' when '上海' then '一线城市' else '二线城市' end) as '工作地址'
from emp;