MySQL 基础 -- 函数(字符串函数 、数值函数、日期函数、流程函数)

发布于:2023-01-09 ⋅ 阅读:(568) ⋅ 点赞:(0)

本节案例继承上节案例 MySQL 基础 – SQL(含原始数据准备)

1. 函数

函数 是指一段可以直接被另一段程序调用的程序或代码

也就意味着,这一段程序或代码在MySQL中已经给我们提供了,我们要做的就是在合适的业务场景调用对应的函数完成对应的业务需求即可。 那
么,函数到底在哪儿使用呢?

我们先来看两个场景:

  1. 在企业的OA或其他的人力系统中,经常会提供的有这样一个功能,每一个员工登录上来之后都能够看到当前员工入职的天数。 而在数据库中,存储的都是入职日期,如 2000-11-12,那如果快速计算出天数呢?
    在这里插入图片描述

  2. 在做报表这类的业务需求中,我们要展示出学员的分数等级分布。而在数据库中,存储的是学生的分数值,如98 / 75,如何快速判定分数的等级呢?
    在这里插入图片描述

其实,上述的这一类的需求呢,我们通过MySQL中的函数都可以很方便的实现 。

MySQL中的函数主要分为以下四类: 字符串函数数值函数日期函数流程函数


1.1 字符串函数

MySQL中内置了很多字符串函数,常用的几个如下:
在这里插入图片描述


1.1.1 concat : 字符串拼接

在这里插入图片描述


1.1.2 lower : 全部转小写

在这里插入图片描述


1.1.3 upper : 全部转大写

在这里插入图片描述


1.1.4 lpad : 左填充

在这里插入图片描述


1.1.5 rpad : 右填充

在这里插入图片描述


1.1.6 trim : 去除首尾空格

在这里插入图片描述


1.1.7 substring : 截取子字符串

注意MySQL的索引从1开始
在这里插入图片描述


1.1.8 示例1:由于业务需求变更,企业员工的工号,统一为5位数,目前不足5位数的全部在前面补0

在这里插入图片描述
由于业务需求变更,企业员工的工号,统一为5位数,目前不足5位数的全部在前面补0。比如: 1号员工的工号应该为00001

update emp
set workno = lpad(workno, 5, '0');

处理完毕后, 具体的数据为:
在这里插入图片描述


1.2 数值函数

常见的数值函数如下:
在这里插入图片描述
说明:RAND()函数返回[0,1)随机数。


1.2.1 ceil:向上取整

在这里插入图片描述


1.2.2 floor:向下取整

在这里插入图片描述


1.2.3 mod:取模

在这里插入图片描述


1.2.4 rand:获取随机数

在这里插入图片描述


1.2.5 round:四舍五入

在这里插入图片描述


1.2.6 示例1:通过数据库的函数,生成一个六位数的随机验证码

思路: 获取随机数可以通过rand()函数,但是获取出来的随机数是在[0,1)之间的,所以可以在其基础上乘以1000000,然后舍弃小数部分,如果长度不足6位,补0

select lpad(round(rand() * 1000000, 0), 6, '0');

在这里插入图片描述


1.3 日期函数

常见的日期函数如下:
在这里插入图片描述


1.3.1 curdate:当前日期

在这里插入图片描述


1.3.2 curtime:当前时间

在这里插入图片描述


1.3.3 now:当前日期和时间

在这里插入图片描述


1.3.4 YEAR,MONTH,DAY:当前年、月、日

在这里插入图片描述在这里插入图片描述
在这里插入图片描述


1.3.5 date_add:增加指定的时间间隔

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


1.3.6 datediff:获取两个日期相差的天数

在这里插入图片描述
在这里插入图片描述


1.3.7 示例1:查询所有员工的入职天数,并根据入职天数倒序排序

思路: 入职天数,就是通过当前日期 - 入职日期,所以需要使用datediff函数来完成。

select name, datediff(curdate(), entrydate) as '入职时间'
from employ
order by 入职时间 desc;

在这里插入图片描述

数据源说明:

在这里插入图片描述


1.4 流程函数

流程函数也是很常用的一类函数,可以在SQL语句中实现条件筛选,从而提高语句的效率。
在这里插入图片描述


1.4.1 if

在这里插入图片描述

在这里插入图片描述


1.4.2 ifnull

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


1.4.3 case when then else end

需求: 查询employ表的员工姓名和工作地址 (北京 /上海 ----> 一线城市 , 其他 ----> 二线城市)

select name, (case workaddress when '北京' then '一线城市' when '上海' then '一线城市' else '二线城市' end) as '工作地址'
from employ;

运行结果
在这里插入图片描述


1.4.4 案例:统计班级学员成绩

首先执行下列SQL去创建数据源:

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);

执行结果:
在这里插入图片描述

需求说明:

在这里插入图片描述

select id,
       name,
       (case when math >= 85 then '优秀' when math >= 60 then '及格' else '不及格' end)       as '数学',
       (case when english >= 85 then '优秀' when english >= 60 then '及格' else '不及格' end) as '英语',
       (case when chinese >= 85 then '优秀' when chinese >= 60 then '及格' else '不及格' end) as '语文'
from score;

运行结果:
在这里插入图片描述


1.5 小结

在这里插入图片描述



本文含有隐藏内容,请 开通VIP 后查看