Mysql基础(四)函数


版权申明:本文用于个人学习记录,学习课程为黑马程序员的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;


文章作者: 程序猿小野
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 程序猿小野 !
评论