目录
前言
一、字符串函数
演示
案例
二、数值函数
演示
案例
三、日期函数
演示
案例
四、流程函数
演示
案例
前言
本期我们就开始MySQL中函数的学习。函数 是指一段可以直接被另一段程序调用的程序或代码。 也就意味着,这一段程序或代码在MySQL中 已经给我们提供了,我们要做的就是在合适的业务场景调用对应的函数完成对应的业务需求即可。 那么,函数到底在哪儿使用呢?
一、字符串函数
函数 | 功能 |
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个长度的字符串 |
演示
A. concat : 字符串拼接
select concat('hello' ,'word');
B. lower : 全部转小写
select lower('HELLO');
C. upper : 全部转大写
select upper('hello');
D. lpad : 左填充
select lpad('0',6,'+');
E. rpad : 右填充
select rpad(0,6,'+');
F. trim : 去除空格
select trim(' Hello MySQL ');
G. substring : 截取子字符串
select substring('Hello MySQL',1,5);
案例
执行语句如下:
update emp set workno = lpad(workno,10,'0');
结果如下:
二、数值函数
常见的数值函数如下:
函数 | 功能 |
CEIL(x) | 向上取整 |
FLOOR(x) | 向下取整 |
MOD(x,y) | 返回x/y的模 |
RAND() | 返回0~1内的随机数 |
ROUND(x,y) | 求参数x的四舍五入的值,保留y位小数 |
演示
A. ceil:向上取整
select ceil(1.1);
B. floor:向下取整
select floor(1.9);
C. mod:取模
select mod(7,4);
D. rand:获取随机数
select rand();
E. round:四舍五入
select round(2.344,2);
案例
select lpad(round(rand(),6)*1000000,6,0);
结果如下:
三、日期函数
常见的日期函数如下:
函数 | 功能 |
CURDATE() | 返回当前日期 |
CURTIME() | 返回当前时间 |
NOW() | 返回当前日期和时间 |
YEAR(date) | 获取指定date的年份 |
MONTH(date) | 获取指定date的月份 |
DAY(date) | 获取指定date的日期 |
DATE_ADD(date, INTERVAL expr type) | 返回一个日期/时间值加上一个时间间隔expr后的时间值 |
DATEDIFF(date1,date2) | 返回起始时间date1 和 结束时间date2之间的天数 |
演示
A. curdate:当前日期
A. curdate:当前日期
B. curtime:当前时间
select curtime();
C. now:当前日期和时间
select now();
D. YEAR , MONTH , DAY:当前年、月、日
select YEAR(now()); select MONTH(now()); select DAY(now());
E. date_add :增加指定的时间间隔select date_add(now(), INTERVAL 7000 YEAR );
F. datediff :获取两个日期相差的天数select datediff('2024-3-07', '2023-12-01');
案例
select name ,datediff(curdate(),entrydate) as cutdays from emp order by cutdays desc ;
结果如下:
四、流程函数
函数 | 功能 |
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的值等于val1,返回 res1,... 否则返回default默认值 |
演示
A. if
select if(false, 'Ok', 'Error');
B. ifnullselect ifnull('Ok','Default'); select ifnull('','Default'); select ifnull(null,'Default');
结果依次如下:
C. case when then else end
需求 : 查询 emp 表的员工姓名和工作地址 ( 北京 / 上海 ----> 一线城市 , 其他 ----> 二线城市 )select name, ( case workaddress when'北京' then '一线城市' when'上海' then '一线城市' else '二线城市' end) as '工作地址' from emp;
案例
创建一个学生成绩表,并且插入如下数据:
create table score(
id int comment 'ID',
name varchar(20) comment '姓名',
math int comment '数学',
english int comment '英语',
chinese int comment '语文'
) comment '学员成绩表';
insert into score(id, name, math, english, chinese) VALUES (1, 'Tom', 67, 88, 95),
(2, 'Rose' , 23, 66, 90),(3, 'Jack', 56, 98, 76);
数据库中,存储的是学生的分数值,如98、75,如何快速判定分数的等级呢(大于80为优先,80~60为及格,小于60为不及格)?
具体的SQL语句如下:
select
id,
name,
(case when math >= 85 then '优秀' when math >=60 then '及格' else '不及格' end )'数学',
(case when english >= 85 then '优秀' when english >=60 then '及格' else '不及格'end ) '英语',
(case when chinese >= 85 then '优秀' when chinese >=60 then '及格' else '不及格'end ) '语文'
from score;
以上就是本期的全部内容了,我们下次见!
分享一张壁纸: