版权申明:本文用于个人学习记录,学习课程为黑马程序员的mysql教程。如需获取官方的学习视频和文档资料,请至黑马程序员官方获取。下面附上教学视频的链接地址,向提供免费教学视频的老师致敬,学如逆水行舟,不进则退,共勉
黑马程序员 MySQL数据库入门到精通,从mysql安装到mysql高级、mysql优化全囊括_哔哩哔哩_bilibili
1、字符串函数
MySQL中内置了很多字符串函数,常用的几个如下:

#---------------函数----------------
-- concat : 字符串拼接
select concat('Hello' , ' MySQL'); # Hello MySQL
-- lower : 全部转小写
select lower('Hello'); # hello
-- upper : 全部转大写
select upper('Hello'); # HELLO
-- lpad : 左填充
select lpad('01', 5, '-'); # ---05
-- rpad : 右填充
select rpad('01', 5, '-'); # 01---
-- trim : 去除空格
select trim(' Hello MySQL '); # Hello MySQL
-- substring : 截取子字符串
select substring('Hello MySQL',1,5); # Hello
-- select substring('Hello MySQL',1,7); Hello M
2、数值函数
常见的数值函数如下:

# 数值函数
-- ceil:向上取整
select ceil(1.1); # 2
-- floor:向下取整
select floor(1.9); # 1
-- mod:取模
select mod(7,4); # 3
select mod(7,2); # 1
-- rand:获取随机数 0-1之间
select rand();
-- round:四舍五入
select round(2.344,2); # 2.34
-- 获取随机数可以通过rand()函数,但是获取出来的随机数是在0-1之间的,
-- 所以可以在其基础上乘以1000000,然后舍弃小数部分,如果长度不足6位,补0
select lpad(round(rand()*1000000 , 0), 6, '0');
3、日期函数
常见的日期函数如下:

#日期函数
-- curdate:当前日期
select curdate();
-- curtime:当前时间
select curtime();
-- now:当前日期和时间
select now();
-- YEAR , MONTH , DAY:当前年、月、日
select YEAR(now());
select MONTH(now());
select DAY(now());
-- date_add:增加指定的时间间隔
select date_add(now(), INTERVAL 70 YEAR );
-- datediff:获取两个日期相差的天数
select datediff('2021-10-01', '2021-12-01');
-- 案例
-- 查询所有员工的入职天数,并根据入职天数倒序排序。
-- 思路: 入职天数,就是通过当前日期 - 入职日期,所以需要使用datediff函数来完成。
select name, datediff(curdate(), entrydate) as 'entrydays' from emp order by entrydays desc;
4、流程函数
流程函数也是很常用的一类函数,可以在SQL语句中实现条件筛选,从而提高语句的效率。
-- 案例
-- 查询所有员工的入职天数,并根据入职天数倒序排序。
-- 思路: 入职天数,就是通过当前日期 - 入职日期,所以需要使用datediff函数来完成。
select name, datediff(curdate(), entrydate) as 'entrydays' from emp order by entrydays desc;
#流程函数
-- if
select if(false, 'Ok', 'Error');
-- ifnull
select ifnull('Ok','Default');
select ifnull('','Default');
select ifnull(null,'Default');
-- 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);
-- 查询id,name,合各学科的等级
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;