MySQL基础-----函数

news2025/1/25 11:08:21

 目录

前言

 一、字符串函数

演示

 案例

二、数值函数

演示

案例 

三、日期函数

 演示

案例

 四、流程函数

演示

案例


前言

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

我们先来看两个场景:
1. 在企业的 OA 或其他的人力系统中,经常会提供的有这样一个功能,每一个员工登录上来之后都能够看到当前员工入职的天数。 而在数据库中,存储的都是入职日期,如 2000-11-12 ,那如果快速计算出天数呢?
2. 在做报表这类的业务需求中 , 我们要展示出学员的分数等级分布。而在数据库中,存储的是学生的分数值,如98/75 ,如何快速判定分数的等级呢?
其实,上述的这一类的需求呢,我们通过 MySQL 中的函数都可以很方便的实现 。
MySQL 中的函数主要分为以下四类: 字符串函数、数值函数、日期函数、流程函数

 

 一、字符串函数

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

函数

功能

CONCAT(S1,S2,...Sn)

字符串拼接,将S1,S2,... 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个长度的字符串

演示

A. concat : 字符串拼接

select concat('hello' ,'word');

 

B. lower : 全部转小写

select lower('HELLO');

 

C. upper : 全部转大写

select upper('hello');

D. lpad : 左填充

select lpad('0',6,'+');

 

E. rpad : 右填充

select rpad(0,6,'+');

F. trim : 去除空格

select trim(' Hello MySQL ');

G. substring : 截取子字符串

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

 案例

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

 执行语句如下:

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

结果如下:

二、数值函数

 常见的数值函数如下:

函数

功能

CEIL(x)

向上取整

FLOOR(x)

向下取整

MOD(x,y)

返回x/y的模

RAND()

返回0~1内的随机数

ROUND(x,y)

求参数x的四舍五入的值,保留y位小数

演示

A. ceil:向上取整

select ceil(1.1);

 

B. floor:向下取整

select floor(1.9);

C. mod:取模

select mod(7,4);

 

D. rand:获取随机数

select rand();

E. round:四舍五入

select round(2.344,2);

案例 

通过数据库的函数,生成一个六位数的随机验证码。
思路: 获取随机数可以通过 rand() 函数,但是获取出来的随机数是在 0-1 之间的,所以可以在其基础上乘以1000000 ,然后舍弃小数部分,如果长度不足 6 位,补 0。
SQL语句如下:
select lpad(round(rand(),6)*1000000,6,0);

结果如下:

三、日期函数

常见的日期函数如下:

函数

功能

CURDATE()

返回当前日期

CURTIME()

返回当前时间

NOW()

返回当前日期和时间

YEAR(date)

获取指定date的年份

MONTH(date)

获取指定date的月份

DAY(date)

获取指定date的日期

DATE_ADD(date, INTERVAL expr type)

返回一个日期/时间值加上一个时间间隔expr后的时间值

DATEDIFF(date1,date2)

返回起始时间date1 和 结束时间date2之间的天数

 演示

A. curdate:当前日期

A. curdate:当前日期

B. curtime:当前时间

select curtime();

 

C. now:当前日期和时间

select now();

 

D. YEAR , MONTH , DAY:当前年、月、日

select YEAR(now());
select MONTH(now());
select DAY(now());
E. date_add :增加指定的时间间隔
select date_add(now(), INTERVAL 7000 YEAR );

F. datediff :获取两个日期相差的天数
select datediff('2024-3-07', '2023-12-01');

案例

查询所有员工的入职天数,并根据入职天数倒序排序。
思路: 入职天数,就是通过当前日期 - 入职日期,所以需要使用 datediff 函数来完成。
select name ,datediff(curdate(),entrydate) as cutdays from emp order by cutdays desc ;

 结果如下:

 四、流程函数

流程函数也是很常用的一类函数,可以在 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 [ default ] END

如果expr的值等于val1,返回

res1,... 否则返回default默认值

演示

A. if

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

B. ifnull
select ifnull('Ok','Default');
select ifnull('','Default');
select ifnull(null,'Default');

结果依次如下:

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

数据库中,存储的是学生的分数值,如9875,如何快速判定分数的等级呢(大于80为优先,80~60为及格,小于60为不及格)?

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

 以上就是本期的全部内容了,我们下次见!

分享一张壁纸:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1496921.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

根据身高重建队列 用最少数量的箭引爆气球 无重叠区间

406.根据身高重建队列 力扣题目链接(opens new window) 假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高…

【C++庖丁解牛】模版初阶

📙 作者简介 :RO-BERRY 📗 学习方向:致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 📒 日后方向 : 偏向于CPP开发以及大数据方向,欢迎各位关注,谢谢各位的支持 目录 1. 泛型编程2. 函数模…

教师必备的办公AI工具

在当今这个信息爆炸的时代,教师的工作已不仅仅局限于传统的课堂教学。为了更好地管理学生、与家长沟通以及提高工作效率,教师们急需一些高效的办公工具。其中,基于AI技术的办公工具成为了教师们的首选。本文将重点介绍群发成绩小程序这一AI工…

Pygame教程05:帧动画原理+边界值检测,让小球来回上下运动

------------★Pygame系列教程★------------ Pygame教程01:初识pygame游戏模块 Pygame教程02:图片的加载缩放旋转显示操作 Pygame教程03:文本显示字体加载transform方法 Pygame教程04:draw方法绘制矩形、多边形、圆、椭圆、弧…

2024.3.5每日一题

LeetCode 到达目的地的方案数 题目链接:1976. 到达目的地的方案数 - 力扣(LeetCode) 题目描述 你在一个城市里,城市由 n 个路口组成,路口编号为 0 到 n - 1 ,某些路口之间有 双向 道路。输入保证你可以…

TDengine 资深研发分享解决思路,长查询不再成为系统性能瓶颈!

长查询问题指的是在数据库写入和查询并存的日常应用场景中,存在处理数据量大且耗时很长的查询长时间占用系统资源,导致写入可能被阻塞的问题。有时,查询代码对于资源释放函数调用的遗忘也可能以长查询问题的形式表现出来。如何在数据写入不被…

SCCM部署时出现的问题(二):找不到数据库路径

场景还原: 在部署SCCM服务器时,客户采用的是分开部署,即一台SCCM服务器和一台SQL Server服务器。 在搭建SCCM服务器时,我们指定了数据库实例,跳转到指定SQL Server数据文件和事务日志文件的位置时,出现了…

大学机器人专业相关课程太难了怎么办

这个问题其实有个更合适的提问角度。 {大学机器人专业相关课程太难了一点兴趣都没有怎么办} 个性化、差异化发展才是主流。 人工智能时代,学生再卷再拼,也干不过机器人啊…… 这个问题反馈非常普遍。 常规解释 大学课程其实想要理解并应用起来&#xff…

Salesforce 2024财年爆发式增长!第一次现金分红

对于Salesforce来说,这是非凡的转型之年,所有的关键指标都表现强劲,现金流和利润增长创下了纪录。截至第四季度末,Salesforce的剩余履约价值(RPO)总额为569亿美元,同比增长17%。 Marc Benioff …

NLP自然语言——基础

一、介绍 1、概念 NLP(Natural Language Processing,自然语言处理)是计算机科学领域以及人工智能领域的一个重要的研究方向,它研究用计算机来处理、理解以及运用人类语言(如中文、英文等),达到…

Error:java:JDK isn‘t specified for module “模块名称“

可能是创建模块后不小心删掉了.idea.或.idea出错 只要删除.idea,close project出去,重新进让idea自动下载

Flyway 9.22.3 + springboot3 + MySQL8.0+,简单使用

文章目录 flyway的依赖配置ieda 启动!!! 关于这篇文章主要是自己在使用flyway时遇到的一些问题以及最终的解决方法 当然包括所有的配置,主要目的是记录一下防止下次使用的时候忘记 flyway的依赖 这里 springboot 3 具体版本不再描…

Day12:信息打点-Web应用源码泄漏开源闭源指纹识别GITSVNDS备份

目录 开源-CMS指纹识别源码获取方式 闭源-习惯&配置&特性等获取方式 闭源-托管资产平台资源搜索监控 思维导图 章节点 Web:语言/CMS/中间件/数据库/系统/WAF等 系统:操作系统/端口服务/网络环境/防火墙等 应用:APP对象/API接口/微…

基于selenium自动化索引点击

小鹅快速刷题,根据selenium和xpath定位题干,使用模糊匹配fuzzywuzzy库查找题目匹配答案,自动点击,完成后更新题库 先导入基本包,准备好题库 from fuzzywuzzy import process from selenium import webdriver import …

Android Split APK是什么

Android Split APK是一项应用程序分发和安装的技术,可以将大型应用程序拆分为多个较小的模块,以便用户可以选择性地下载和安装所需的模块,而无需一次性下载整个应用程序。这种技术旨在提高用户体验、减少下载时间和节省存储空间。 Android S…

什么是红黑树?用一组数据来介绍一下红黑树

上篇博客,我们使用代码完成了一个简单的红黑树功能,这篇,我补充一下,关于红黑树的相关知识点。 红黑树概述 红黑树是一种自平衡的二叉搜索树,它在每个节点上增加了一个存储位来表示节点的颜色,可以是红色…

信息安全与阿里云等保三级方案实践总结

信息安全在当今数字化时代变得至关重要,企业和组织需要采取有效措施来保护其数据和信息资产。阿里云作为中国领先的云服务提供商,提供了等保三级方案,帮助用户满足国家信息安全等级保护的要求。本文将探讨信息安全和阿里云等保三级方案的重要…

多媒体信息处理-重点知识-3. Feature Indexing and Retrieval

Chap 3. Feature Indexing and Retrieval 什么是索引? 为了提高数据集的检索效率而生成的结构化信息 基于特征的相似度匹配是多媒体数据检索方法的基础 从多媒体对象中提取重要特征,将其转化成高维特征向量存储在数据库中 相似性度量: 两种…

数据库|基于TiDB Binlog架构的主备集群切换操作手册

目录 一、具体操作过程 //1、停业务,待drainer追平主、备库数据 //2、使用sync-diff-inspector校验主从库数据是否一致 //3、关停主库到灾备库drainer同步链路后记录当前drainer同步TSO //4、使用dumpling/BR对灾备库进行数据全量备份(备份期间可继…

leetcode——异或运算—— 只出现一次的数字

给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。 示例 1 : 输入&#xff…