MySQL基础-----函数

 目录

前言

 一、字符串函数

演示

 案例

二、数值函数

演示

案例 

三、日期函数

 演示

案例

 四、流程函数

演示

案例


前言

        本期我们就开始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;

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

分享一张壁纸:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux之线程概念

目录 一、细粒度划分 1、堆区细粒度划分 2、物理内存和可执行程序细粒度划分 3、虚拟地址到物理地址的转化 二、线程的概念 1、基本概念 2、线程的优点 3、线程的缺点 4、线程异常 5、线程用途 三、Linux下的进程和线程 一、细粒度划分 1、堆区细粒度划分 在语言…

php安装kafka

我的开发环境是php7.3 ,先来部署两个php扩展,php7.3目录下放librdkafka.dll,ext/php_rdkafka.dll,php.ini增加,[rdkafka] extension php_rdkafka.dll php7.3对应的扩展包链接:PECL :: Package :: rdkafka 看自己php版本对应在这里找PECL :: …

antd vue 选择控件的使用

Ant Design Vue-------Select 选择器 今天就讲讲Ant Design Vue下的控件----select 下拉框 结合项目中的需求,讲一下该控件如何配置,需求: (1)设置控件的宽度和高度 (2)绑定数据源 &#x…

IT人才职业发展路径

IT人才的职业发展路径通常是多样化的,因为IT领域涵盖了广泛的技术和职能角色。以下是一个典型的IT人才职业发展路径的梳理,但具体情况会根据个人兴趣、技能、经验和行业需求而有所不同: 入门级岗位: 技术支持工程师:提…

CVE-2024-25600 WordPress Bricks Builder RCE-漏洞分析研究

本次代码审计项目为PHP语言,我将继续以漏洞挖掘者的视角来分析漏洞的产生,调用与利用..... 前方高能,小伙伴们要真正仔细看咯..... 漏洞简介 CVE-2024-25600 是一个严重的(CVSS 评分 9.8)远程代码执行 (RCE) 漏洞&am…

SpringBoot初步学习

SpringBoot 今日目标: 掌握基于SpringBoot框架的程序开发步骤 熟练使用SpringBoot配置信息修改服务器配置 基于SpringBoot的完成SSM整合项目开发 1. SpringBoot简介 SpringBoot 其设计目的是用来简化 Spring 应用的初始搭建以及开发过程。 1.1 SpringBoot快速…

ROS从入门到精通4-2:Docker安装ROS、可视化仿真与终端复用

目录 0 专栏介绍1 Docker安装ROS2 Docker可视化仿真2.1 显示配置2.2 启动容器 3 终端复用工具3.1 session操作3.2 window操作3.3 pane操作3.4 其他操作 0 专栏介绍 本专栏旨在通过对ROS的系统学习,掌握ROS底层基本分布式原理,并具有机器人建模和应用ROS…

大数据开发-Hadoop之YARN介绍以及实战

文章目录 YARN基本介绍YARN的结构分析YARN中的调度器实际案例:YARN多资源队列的配置和使用 YARN基本介绍 实现Hadoop集群的资源共享不仅支持MapReduce,还支持Spark,Flink等计算 YARN的结构分析 主要复制集群资源的管理和调度,支…

【论文阅读】单词级文本攻击TAAD2.2

TAAD2.2论文概览 0.前言1-101.Bridge the Gap Between CV and NLP! A Gradient-based Textual Adversarial Attack Frameworka. 背景b. 方法c. 结果d. 论文及代码 2.TextHacker: Learning based Hybrid Local Search Algorithm for Text Hard-label Adversarial Attacka. 背景b…

javaWebssh水利综合信息管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh水利综合信息管理系统是一套完善的web设计系统(系统采用ssh框架进行设计开发),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCA…

BJFU|操作系统考试复习纲要(思维导图版)

纲要涵盖五个章节,每节一图。红色框部分为必考重点,建议认真复习。

数据结构与算法-归并排序

引言 在计算机科学的广阔领域中,数据结构与算法犹如两大基石,支撑着软件系统高效运行。本文将深度剖析一种基于分治策略的排序算法——归并排序,并探讨其原理、实现步骤以及优缺点,以期帮助读者深入理解这一高效的排序方法。 一、…

用开发CesiumJS模拟飞机飞行应用(一,基本功能)

本部分向您展示如何构建您的第一个 Cesium 应用程序,以可视化模拟从旧金山到哥本哈根的真实航班,并使用 FlightRadar24收集的雷达数据。您将学习如何: 在网络上设置并部署您的 Cesium 应用程序。 添加全球 3D 建筑物、地形和图像的基础图层。…

MySQL 学习笔记(基础篇 Day2)

「写在前面」 本文为黑马程序员 MySQL 教程的学习笔记。本着自己学习、分享他人的态度,分享学习笔记,希望能对大家有所帮助。推荐先按顺序阅读往期内容: 1. MySQL 学习笔记(基础篇 Day1) 目录 3 函数 3.1 字符串函数 3…

PostgreSQL开发与实战(6.2)体系结构2

作者:太阳 二、逻辑架构 graph TD A[database] -->B(schema) B -->C[表] B -->D[视图] B -->E[触发器] C -->F[索引] tablespace 三、内存结构 Postgres内存结构主要分为 共享内存 与 本地内存 两部分。共享内存为所有的 background process提供内…

VI-ORBSLAM2编译运行

ORB-SLAM2编译运行 源码地址电脑配置环境配置编译轨迹保存为tum格式运行结果Euroc数据集 源码地址 源码链接:https://github.com/jingpang/LearnVIORB 电脑配置 Ubuntu 18.04 ROS Melodic GTSAM 4.0.2 CERES 1.14.0 pcl1.8vtk8.2.0opencv3.2.0 环境配置 之前…

简易版手淘视频播放器开发心路历程

需求背景 简单描述一下这个功能:在一个走马灯组件里面第一屏是一个视频,第二屏第三屏是图片,点击播放视频,播放过程中滚动窗口,视频 fixed 在窗口顶部,回到顶部,视频还原,两个窗口视…

Aigtek:功率放大器的选型技巧有哪些

功率放大器在电子设备中扮演着重要的角色,它能够将输入信号放大到所需要的功率水平。在选择功率放大器时,我们需要考虑多个因素,包括功率需求、频率响应、失真和稳定性等。本文将介绍功率放大器选型的一些技巧,帮助您找到适合的功…

基于OpenCV的图形分析辨认05(补充)

目录 一、前言 二、实验内容 三、实验过程 一、前言 编程语言:Python,编程软件:vscode或pycharm,必备的第三方库:OpenCV,numpy,matplotlib,os等等。 关于OpenCV,num…

java基础-锁之volatilesynchronized

文章目录 volatilevolatile内存语义volatile的可见性volatile无法保证原子性volatile禁止重排优化硬件层的内存屏障volatile内存语义的实现下面是基于保守策略的JMM内存屏障插入策略。下面是保守策略下,volatile写插入内存屏障后生成的指令序列示意图下图是在保守策…