【MySQL | 基础篇】02、MySQL 函数详解

2023-05-16

目录

一、字符串函数

1.1 concat : 字符串拼接

1.2 lower : 全部转小写

1.3 upper : 全部转大写

1.4 lpad : 左填充

1.5 rpad : 右填充

1.6 trim : 去除空格

1.7 substring : 截取子字符串

1.8 案例

二、数值函数

2.1 ceil:向上取整

2.2 floor:向下取整

2.3 mod:取模

2.4 rand:获取随机数

2.5 round:四舍五入

2.6 案例

三、日期函数

3.1 curdate:当前日期

3.2 curtime:当前时间

3.3 now:当前日期和时间 

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

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

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

3.7 案例

四、流程函数

4.1 if

4.2 ifnull

4.3 case... when... then... else... end 

4.4 案例


 

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

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

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

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

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

一、字符串函数

MySQL 中内置了很多字符串函数,常用的几个如下:

在 Navicat 演示如下: 

1.1 concat : 字符串拼接

SELECT CONCAT('hello','mysql');

1.2 lower : 全部转小写

SELECT LOWER('Hello');

1.3 upper : 全部转大写

SELECT UPPER('Hello');

1.4 lpad : 左填充

select lpad('01', 5, '-');

1.5 rpad : 右填充

select rpad('01', 5, '-');

1.6 trim : 去除空格

select trim(' Hello MySQL ');

1.7 substring : 截取子字符串

select substring('Hello MySQL',1,5);

1.8 案例

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

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

处理完毕后, 具体的数据为:

二、数值函数

常见的数值函数如下: 

2.1 ceil:向上取整

select ceil(1.1);
select ceil(1.9);

2.2 floor:向下取整

select floor(1.1);
select floor(1.9);

2.3 mod:取模

select mod(7,4);

2.4 rand:获取随机数

 select rand();

2.5 round:四舍五入

select round(2.344,2);

2.6 案例

通过数据库的函数,生成一个六位数的随机验证码。

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

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

三、日期函数

常见的日期函数如下: 

3.1 curdate:当前日期

select curdate();

3.2 curtime:当前时间

select curtime();

3.3 now:当前日期和时间 

select now();

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

select YEAR(now());

select MONTH(now());

select DAY(now());

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

select date_add(now(), INTERVAL 70 YEAR );

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

select datediff('2022-10-01', '2023-04-01');

3.7 案例

查询所有员工的入职天数,并根据入职天数倒序排序。

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

select name, datediff(curdate(), entrydate) as 'entrydays' from emp order by entrydays desc;

四、流程函数

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

4.1 if

select if(false, 'Ok', 'Error');

4.2 ifnull

select ifnull('Ok','Default');

select ifnull('','Default');

select ifnull(null,'Default');

4.3 case... when... then... else... end 

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

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

4.4 案例

统计班级各个学员的成绩,展示的规则如下:
-- >= 85,展示优秀
-- >= 60,展示及格
-- 否则,展示不及格

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

具体的 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;

上一篇文章:【MySQL | 基础篇】01、SQL 语句详解_mysql 基础sql语句_Stars.Sky的博客-CSDN博客

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【MySQL | 基础篇】02、MySQL 函数详解 的相关文章

  • python 随机数 random 库的使用总结

    目录 1 random 库中的常用随机数生成函数 2 一些用法举例 3 随机数种子 seed a 的理解与使用 random 库的主要目的就是生成随机数 1 random 库中的常用随机数生成函数 from random import 1
  • JDBC 配置

    JDBC Java DataBase Connectivity 规范 JDBC是一套协议 xff08 规范 xff09 是java开发人员和数据库厂商达成的协议 是由sun定义一组接口 由数据库厂商来实现 并规定了java开发人员访问数据库
  • Gazebo下载所有模块到本地

    从https bitbucket org osrf gazebo models上下载model库 xff1b 将下载的文件解压 xff0c 将解压后的文件夹重命名为models将models复制到 gazebo文件夹中 xff08 如果 g
  • linux操作系统和系统资源理论基础

    目录 一 xff1a 操作系统 二 xff1a 程序如何被CPU读取 三 xff1a CPU缓存 四 xff1a CPU缓存策略 五 xff1a 如何实现系统多任务 六 xff1a 进程切换过程初探 七 xff1a 进程的调度规则 八 xf
  • containerd的安装和使用

    containerd介绍 containerd是从docker项目中剥离出来的一个容器运行时 几乎囊括了容器管理的所有功能 xff0c 并且containerd内置了CRI插件K8S的kubelet组件可以直接调用containerd xf
  • 部署harbor并实现https(SAN签发证书)

    目录 一 安装docker docker compose 二 安装harbor 三 签发证书 四 修改配置文件 五 运行harbor 六 客户端测试 xff1a 使用系统 xff1a ubuntu 20 04 3 harbor依赖于dock
  • 二进制部署kubernetes高可用集群

    目录 一 集群外围节点准备 二 部署kubeasz 3 3 1集群 三 初始化集群 四 测试集群网络可用性 五 集群扩容 需要master node etcd节点各三台 xff1b harbor服务器 deploy部署节点 负载均衡主机各一
  • coredns部署

    目录 一 获取coredns yaml文件 二 修改coredns yaml文件 三 基于yaml文件启动coredns服务 coredns域名解析流程 xff1a 举例 xff1a 当pod1应用想通过dns域名的方式访问pod2则首先根
  • dashboard的安装使用

    目录 一 下载dashboard的yaml文件 二 修改dsashboard的yaml文件镜像 三 修改dashboard的yaml文件内容 四 创建dashboard 通常而言kubernetes中完成的所有操作都是通过命令行工具kube
  • K8S内部pod之间相互调用案例和详解

    目录 一 部署nginx容器 二 部署tomcat服务 三 使用nginx代理tomcat服务 四 测试 服务发现简介 xff1a 1 service是用于K8S的服务发现的重要组件 xff0c pod作为运行业务的承载方式 xff0c 要
  • 记一次rsyslog配置问题,导致系统无法打印日志

    工作中发现有些机器发生异常 xff0c 想看下messages日志 xff0c 却没有数据 xff0c 看了下rsyslog中日志都定义了打印出的路径 xff0c 但是就是没有日志 查看结果 xff1a 所有的日志文件都没有打印数据 查看了
  • python 字符串操作总结

    目录 1 求字符串长度及字符串转换 2 删除空格 分割字符串 3 连接字符串 4 大小写转换 5 字符串替换 6 统计子字符串的出现次数 7 查找子字符串第一次出现的位置 8 判断字符串的某些属性是否为True 9 字符串转化为数字 10
  • K8S pod 亲和与反亲和 (podAffinity与podAntiAffinity)

    目录 1 简介 xff1a 2 配置须知 xff1a 示例 xff1a 一 创建前端nginx容器 二 创建后端容器 xff0c 与nginx容器做软亲和 三 创建后端容器 xff0c 与nginx容器做硬亲和 1 简介 xff1a 前面介
  • K8S-污点(taints)与容忍(toleration)

    简介 xff1a 污点 xff08 taints xff09 打上了污点的node就不会承载新pod的调度 容忍 xff08 toleration xff09 设置了有容忍的pod xff0c 仍能调度到有污点的node上 一 污点介绍 x
  • Kafka 客户端管理工具 Offset Explorer

    简介 xff1a 我们在项目开发中根据实际业务需求会使用到一些中间件 xff0c 比如缓存redis xff0c 消息队列 xff0c kafka rabbitMQ等 xff0c 在代码中集成后 xff0c 可以通过命令来查看数据的走向 x
  • 力扣(Leetcode)——python3

    目录 动态规划 70 爬楼梯 198 打家劫舍 213 打家劫舍 509 斐波那契数 740 删除并获得点数 746 使用最小花费爬楼梯 1137 第N个泰波那契序列 动态规划 Dynamic Programming 递归 43 迭代 45
  • Python 无参装饰器详解

    1 储备知识 args xff0c kwargs span class token keyword def span span class token function index span span class token punctua
  • 操作系统进程与线程实验二

    操作系统进程与线程实验二 一 实验目的 xff1a 对比进程与线程 xff0c 理解进程与线程的联系与区别 xff0c 学会使用多线程相关函数 一个进程中的多个线程之间使用相同的地址空间 xff0c 共享大部分数据 xff0c 启动一个线程
  • STM32CubeMX+keil5+esp8266(基于hal库的stm32+esp8266连接)

    MX的烧录口和时钟设置 xff1a 配置时钟 xff1a 串口1配置 xff08 用来输出提示信息 xff09 串口2配置波特率115200 xff0c 使能全局中断 xff08 用来做esp8266的串口通信 xff09 命好名生成代码并
  • Vue.js基础---简单的模板页面

    Vue js基础 简单的模板页面 1 模板页面包含了哪些东西 xff1f gt html 43 js 2 js以什么形式 语法 存在 xff1f 插值 双大括号表达式 xff0c 插入一个动态的值在标签内文本内容上 xff0c 动态显示数据

随机推荐