MySQL -函数
常用字符串函数SELECT...
函数 |
功能 |
CONCAT(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个长度的字符串 |
实例:
-- CONCAT拼接字符串
select CONCAT('hello', 'MySQL');
-- lower 全部转换小写
select lower('HELLO');
-- upper 全部转换大写
select upper('hello');
-- lpadz 左填充
select lpad('01',5,'-');
-- rpad 右填充
select rpad('01',5,'-');
-- TRIM 去掉字符串头部和尾部的空格
select trim(' HELLO world ');
-- SUBSTRING 返回从字符串str从start位置起的len个长度的字符串
select SUBSTRING('HELLO MYSQL',1,5);
练习:由于业务需求变更,企业员工的工号,统一为5位数,目前不足5位数的全部在前面补0。比如: 1号员工的工号应该为00001
update emp set wordno = lpad(wordno ,5,'0');
常用数值函数
函数 |
功能 |
CEIL(X) |
向上取整 |
FLOOR(X) |
向下取整 |
MOD(X,Y) |
返回x/y的模 |
RAND() |
返回0~1内的随机数 |
ROUND(X,Y) |
求参数X的四舍五入的值,保留Y位小数 |
实例:
-- ceil() 向大取整
select ceil(1.2);
-- floor() 向下取整
select floor(1.2);
-- mod(x,y) 返回x/y的模(取余)
select MOD(5,2);
-- rand();
select rand();
-- round(X,Y)求参数X的四舍五入的值,保留Y位小数
select round(5.4556,2);
-- 通过数据库的函数,生成一个六位数的随机验证码。
select lpad(ceil(rand()*1000000),6,0);
MySQL--日期函数
函数 |
功能 |
CURDATE() |
返还当前日期 |
CURTIME() |
返还当前时间 |
NOW() |
返还当前日期和时间 |
YEAR(DATE) |
获取指定date的年份 |
MONTH(DATE) |
获取指定date月份 |
DAY(DATE) |
获取指定DATE的日期 |
DATE_ADD(DATE,INTERVAL EXPR TYPE) |
返回一个日期/时间加上一个时间间隔expr后的时间值 |
DATEDIFF(DATE1,DATE2) |
返回起始时间DATE1和结束时间DATE2之间的天数 |
实例 :
-- CURDATE()当前日期
select CURDATE();
-- CURTIME() 当前时间
SELECT CURTIME();
-- NOW()
SELECT NOW();
-- YEAR,MONTH,DAY,获取指定date的年/月/日
SELECT YEAR(NOW());
SELECT MONTH(NOW());
SELECT DAY(NOW());
-- DATE_ADD(DATE,INTERVAL EXPR TYPE) 往后推的时间
SELECT DATE_ADD(NOW(),INTERVAL 70 DAY);
SELECT DATE_ADD(NOW(),INTERVAL 70 MONTH);
SELECT DATE_ADD(NOW(),INTERVAL 70 YEAR);
-- DATEDIFF(DATE1,DATE2) 两日期的差别
SELECT DATEDIFF(NOW(),'2020-11-11');
案例:查询所有员工的入职天数,并根据入职天数倒叙排序。
select name , datediff(now(),entrydate) as '入职天数'
from emp
order by '入职天数' desc;
流程控制函数
流程控制函数在SQL语句中实现条件筛选,从而提高语句的效率
函数 |
功能 |
IF(value,t,f) |
如果value为true,则返回t,否则返回f |
IFNULL(value1,value2) |
如果value1不为空,返回value,否则返回value2 |
CASE WHEN [val1] THEN [res1] ... ELSE [default] END |
如果value为true,返回res1,...否则返回default默认值 |
CASE [expr] WHEN [val1] THEN [res1] ... ELSE [default] END |
如果expr的值等于val1,返回res1, ... 否则返回default默认值。 |
-- IF()
SELECT IF(TRUE,'OK','ERROR');
-- IFNULL(1,2)如果第一个值不为空就返回第一个值,否则返回第二个值
SELECT IFNULL('OK','DEFAULT');
SELECT IFNULL('','DEFAULT');
SELECT IFNULL(NULL,'DEFAULT');
-- case when then else end
-- 需求:查询emp表的员工姓名和年龄(18 --->刚成人 ,20 ---> 成人两年了,其他---> 其他)
select name,case age when 18 then '刚成人' when 20 then '成人两年了' else '其他' end
from emp;
案例:
统计班级冬个些员的成绩,展示的规则如下:>= 85展不优秀;>= 60,展示及格,否则展示不及格
select name,grade,case when grade >= 85 then '优秀' when grade >= 60 then '及格' else '不及格' end as'是否及格'
from emp;