数据库之函数篇(0620)
-
函数定义
- 函数是指一段可以直接被另一段程序调用的程序或代码。
- 函数是指一段可以直接被另一段程序调用的程序或代码。
1、字符串函数
- 字符串函数列表
函数 | 功能 |
---|---|
concat(s1,s2,s3,…sn) | 字符串拼接,将s1,s2,s3,…,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 函数(参数);
-
例子:
-- 字符串拼接
SELECT concat('Hello ','mysql');
-- 转为小写
select lower('Hello');
-- 转为大写
select upper('Hello');
-- 左填充
select lpad('02d',9,'*');
-- 右填充
SELECT rpad('0o',9,'111');
-- 去掉字符串头部和尾部的空格
select trim(' hello world! ');
-- 截取字符串
SELECT substring('cbd isvodnd',2,5);
2、数值函数
函数 | 功能 |
---|---|
ceil(x) | 向上取整 |
floor(x) | 向下取整 |
mod(x,y) | 返回 x/y 的模(即 x/y 的余数) |
rand() | 返回0~1(包含0,但不包含1)的随机数 |
round(x,y) | 求参数x的四舍五入的值,保留 y 位小数 |
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之间的天数 |
- 例子
-- 返回当前日期
SELECT curdate();
-- 返回当前时间
select curtime();
-- 返回当天时间
select now();
-- 返回指定 date 的年份
select year(now());
-- 返回指定 date 的月份
select month(now());
-- 返回指定 date 的日期
select day(now());
-- 返回一个时间/日期值加上一个时间间隔expr后 的时间值
select date_add('2021-10-17',interval 20 month);
-- 返回起始时间date1和结束时间date2之间的天数
select datediff('2024-03-25','2021-06-06');
-- 查询所有员工的入职天数,并根据入职天数倒序排序
select *, DATEDIFF(curdate(),entrydate) as entryDays from tb_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 [defalut] end | 如果expr的值为val1,返回res1,否则返回default 默认值 |
-- 查询所有员工的入职天数,并根据入职天数倒序排序
select *, DATEDIFF(curdate(),entrydate) as entryDays from tb_emp ORDER BY entryDays desc;
-- if(value,t,f);
SELECT if(false,12,'cndj');
-- ifnull(value1,value2) 只要value1不是null都返回value1
SELECT ifnull(null,'cnds');
将表中的工作地址为 北京 、上海的标志为一线城市,其他标志为二线城市
select worker_name,(case workaddress when '北京' then '一线城市' when '上海' then '一线城市' else '二线城市' end ) as '工作地址' from tb_emp;
- 练习
- 根据需求完成以下SQL编写统计班级各个学员的成绩,展示的规则如下:
- 大于等于85,展示优秀
- 大宇等于60,展示及格否则
- 否则展示不及格
select worker_name,(case when age >= 40 then '中年' when age between 18 and 39 then '青年' else '未成年' end ) as '年龄' from tb_emp;
5、小结
这是本人的黑马课堂学习笔记,如有侵权,请联系删除哟!!!
黑马课程链接如下:
黑马程序员 MySQL数据库入门到精通,从mysql安装到mysql高级、mysql优化全囊括
https://www.bilibili.com/video/BV1Kr4y1i7ru?p=107&vd_source=4c23446fa14af53c8888fb87ce4acb4c
如有错误,请大家评论区留言哟!!!