函数: 一段可以直接被另一段程序调用的程序或代码
字符串函数
CONCAT, LOWER, UPPER, LPAD, RPAD, TRIM, SUBSTRING
函数 | 功能 |
---|---|
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 concat(‘Hello’,‘MySQL’); | Hello MySQL |
字符串转换为小写: select lower(‘HELLO’); | hello |
字符串转换为大写: select upper(‘hello’); | HELLO |
左填充字符串: select lpad(‘01’,5, ‘-’); | - - - 01 |
右填充字符串: select rpad(‘01’,5,‘-’); | 01- - - |
去掉头部和尾部的空格: select trim(’ Hello MySQL '); | Hello MySQL |
截取字符串: select substring(‘Hello MySQL’,1,5); | Hello |
需求: 由于业务变更,企业员工的工号, 统一为5位数, 目前不足5位数的全部在前面补0, 比如1号员工的工号应该为00001
update employee_id set workno = lpad(workno,5,'0');
数值函数
CEIL, FLOOR, MOD, RAND, ROUND
函数 | 功能 | 返回值 |
---|---|---|
CEIL(x) | 向上取整 | select ceil(1.1);–>2 |
FLOOR(x) | 向下取整 | select floor(1.9);–>1 |
MOD(x,y) | 返回x/y的模 | select mod(3,4);–>3,相当于3%4取余 |
RAND() | 返回0~1内的随机数 | |
ROUND(x,y) | 求参数x的四舍五入的值,保留y位小数 | select round(2.345,2);–>2.35 |
需求: 通过数据库的函数,生成一个六位数的随机验证码
select lpad(round(rand()*1000000,0),6,'0');
日期函数
函数 | 功能 | 返回值 |
---|---|---|
CURDATE() | 返回当前日期 | select curdate(); |
CURTIME() | 返回当前时间 | select curtime(); |
NOW() | 返回当前日期和时间 | select now(); |
YEAR(date) | 获取指定date的年份 | |
MONTH(date) | 获取指定date的月份 | |
DAY(date) | 获取指定date的日期 | |
DATE_ADD(date, INTERVAL expr type) | 返回一个日期/时间值加上一个时间间隔expr后的时间值 | select date_add(now(), INTERVAL 70 DAY); |
DATEDIFF(date1,date2) | 返回起始时间date1和结束时间date2之间的天数 | select datediff(‘2021-12-01’,‘2021-10-01’); |
案例: 查询所有员工的入职天数,并根据入职天数倒序排序
select name,
datediff(curdate(),entrydate) as 'entrydays' from employee order by entrydays desc;
流程函数
可以在SQl语句中实现条件筛选,提高语句效率
函数 | 功能 |
---|---|
IF (value, t, f) | 如果value为true,则返回t,否则返回f |
IFNULL(value1, value2) | 如果value不为空, 返回value1, 否则返回value2 |
CASE WHEN [val] THEN [res1] … ELSE[default] END | 如果val1为true, 返回res1, …否则返回default默认值 |
CASE [expr] WHEN [val1] THEN [res1]…ELSE [default] END | 如果expr的值等于val1, 返回res1, …否则返回default默认值 |
需求: 查询某表员工姓名和工作地址(北京/上海–>一线城市,其他–>二线城市)
select name,
(case workaddress when '北京' then '一线城市'
when '上海' then '一线城市' else '二线城市' end)
as '工作地址' from tablex;