【MySQL】一些内置函数(时间函数、字符串函数、数学函数等,学会了有妙用)

news2024/11/18 1:41:38

内置函数

  • 前言
  • 正式开始
    • 时间函数
      • 显示当前日期、时间、日期时间的
      • 日期计算
      • 相差多少天
      • 示例
        • 创建一张表,记录生日
      • 留言表
    • 字符串函数
      • charset
      • concat
      • instr(string, substring)
      • ucase和lcase
      • left(string, length)
      • length求字符串长度
      • replace(str, search_str, replace_str)
      • trim、ltrim、rtrim
      • 一些示例
        • 要求显示exam_result表中的信息,显示格式:“XXX的语文是XXX分,数学XXX分,英语XXX分"
        • 求学生表中学生姓名占用的字节数
        • 将EMP表中所有名字中有S的替换成'上海'
        • 截取EMP表中ename字段的第二个到第三个字符
        • 以首字母小写的方式显示所有员工的姓名
    • 数学函数
      • abs
      • bin
      • hex
      • conv(num, from_base, to_base)
      • ceiling 和 floor
      • format(一个小数, 指定小数位数)
      • mod
      • rand
    • 其他函数
      • user
      • database
      • md5
      • ifnull(val1, val2)

在这里插入图片描述

前言

MySQL中内置类很多函数,这些函数可以让我们在进行数据统计、查表、建表的时候更加方便,本篇将MySQL中的内置函数分为四类,分别是:

  • 时间函数

  • 字符串函数

  • 数学函数

  • 其他函数

正式开始

时间函数

讲下面这些(先不用细看):
在这里插入图片描述

简单介绍介绍。

首先声明一点,日期是指年月日,时间是指时分秒,日期时间是年月日时分秒。这在我前面的博客也是说过的。

显示当前日期、时间、日期时间的

current_date,当前日期,就是返回你调用这个函数时的日期:
在这里插入图片描述
不加括号也行,不过既然叫了函数那就最好把括号带上。

【注意】这些内置函数都要搭配着select使用,不然显示不出来:
在这里插入图片描述

关于select我就不说了,在前面博客已经详细说过了。

current_time,当前时间,就是返回你调用这个函数时的时间:
在这里插入图片描述
就不演示不带括号的了。

current_timestamp(),当前时间戳,时间和日期都会显示:
在这里插入图片描述
我前面在讲数据类型的时候,有个类型就叫做timestamp,默认值就是插入数据时的时间戳。

还有一个和这个时间戳很像,就是now:
在这里插入图片描述
其实就和current_timestamp一样的效果。

日期计算

两个,一个加一个减。

date_add,可以加年、月、日、时、分、秒。
在这里插入图片描述
还可以搭配前面的now来用:
在这里插入图片描述
会自动按照你给的类型来计算,类型不同结果也就不同。注意interval不能掉,还有类型也不能掉。

date_sub同理,就不说了。

相差多少天

date_diff,这个是计算两个日期之间相差多少天:
在这里插入图片描述

这个是用前者前去后者,故会出现负数的情况:
在这里插入图片描述

也可以嵌套调用:
在这里插入图片描述

统计工龄的时候就可以用这个函数。

时间的接口就讲这么些来两个例子。

示例

创建一张表,记录生日

生日一般精确到年月日就可以了,时分秒这里就不记录了。

创表:
在这里插入图片描述
里面的这些类型什么的我就不讲了,我前面的博客中有。

插入点数据:
在这里插入图片描述
因为id是自增的,所以不用手动插入。

再来嵌套调用:
在这里插入图片描述

能不能插入纯时分秒的呢?
在这里插入图片描述
竟然可以。

再来试一个:
在这里插入图片描述
竟然也可以。

我为啥说竟然呢?
因为我前面在讲数据类型的时候说过数据类型其实算是一种约束,MySQL对于数据匹配的要求是很严格的,但这里并没有那么严格,像隐式类型转换,把这当成例外。

其实可以理解成所有的时间函数底层用的都是一个函数,不过是要哪个显示哪个罢了。不过建议插入的时候类型为日期就用日期插,不要加时间。

留言表

平时很多软件都有评论区,评论有一个很重要的字段就是时间,比如说xxx发布于2023-10-23,其实原理就是客户点击发送,数据发送到后台服务器后,后台服务器将其转为sql语句对数据库做插入动作,这里就简单实现一个。

在这里插入图片描述

插入点数据:
在这里插入图片描述

这样就能把评论内容和评论时间拿到手。

如果显示时只想显示日期,就在sendtime外套个date就行:
在这里插入图片描述

再插入点:
在这里插入图片描述

来个问题:统计2分钟内发布过的帖子。
怎么确定表中的哪些数据是两分钟以内的?
找到当前时间的两分钟前的时间,假如说当前时间是 t 0 t_0 t0,当前时间的2分钟前是 t 1 t_1 t1,所以 t 1 t_1 t1的值就是 t 0 − 2 t_0 - 2 t02,对应图中就应该是这样:
在这里插入图片描述

此时在 t 1 ∼ t 0 t_1 \sim t_0 t1t0之内的帖子就是我们想要的,那这之中的帖子在时间上有什么特点呢?假如说帖子的时间是 t t t,那么就是这样:
在这里插入图片描述

这里t一定是小于 t 0 t_0 t0的,这点对于所有的帖子都会满足。

那么就好说了,只要让 t > t 1 t > t_1 t>t1就行了,也就是 t > t 0 − 2 t > t_0 - 2 t>t02,那么就会有两种解法:
t > t 0 − 2 t > t_0 - 2 t>t02 t + 2 > t 0 t + 2 > t_0 t+2>t0

都来试一试,插入点数据:
在这里插入图片描述

然后筛选:
在这里插入图片描述

再重新插入点:
在这里插入图片描述

筛选:
在这里插入图片描述

筛选:
在这里插入图片描述

可以看到都是ok的。

字符串函数

讲这些:
在这里插入图片描述

charset

charset,查看字符集:
在这里插入图片描述

在这里插入图片描述

再用一下我前面博客定义的一张表:
在这里插入图片描述

在这里插入图片描述

都是utf8的。因为我的配置文件搞了默认的字符集。

再显示一下数字的:
在这里插入图片描述

concat

concat,追加的函数,只要是字符串就能追加,不管字符串的内容,有点像C中的strcat,来点例子:
在这里插入图片描述

在这里插入图片描述

里面可以有多个串:
在这里插入图片描述

没啥难的。

instr(string, substring)

这个函数是用来查询substring是否在string中,如果在就会返回其在第一个字符的位置,如果不在就返回0。

例子:
在这里插入图片描述
这里1234在abcde12345efg中,1在其中的第六个位置,这里是从1开始的,不是从0开始的。

再来个不存在的:
在这里插入图片描述

有点像find_in_set,这个是用来查找某一项是否在一个集合当中,如果在会返回其在集合中的位置,如果不在会返回0。想了解一下的可以看我这篇博客:【MySQL】数据类型

ucase和lcase

这两个是用来转大小写的,u是up,转大;l是low,转小。

转大写:
在这里插入图片描述

其中不是字母的就不会管。

转小写:
在这里插入图片描述

left(string, length)

这个函数用来取string左边的length个字符。

演示:
在这里插入图片描述

那有没有right?
在这里插入图片描述
有的。

length求字符串长度

在这里插入图片描述

这里编码会导致结果有点和你想的不一样:
在这里插入图片描述

因为utf8下一个汉字占用3个字节。而且utf8还是变长的编码,一部分是1字节的,比如说我在其中加上一点英文字母:
在这里插入图片描述
其中你好占用6字节,abc占用3字节。

replace(str, search_str, replace_str)

这个函数在str中找到searche_str字符串并将searche_str替换成replace_str。

例如:
在这里插入图片描述

这里将123456789中的567替换成了你好。

trim、ltrim、rtrim

这三个用来去掉左右两边字符串的空格。

trim是两边都去掉,ltrim是只去掉左边的,rtrim是只去掉右边的。
在这里插入图片描述

有时可能因为网络传输而导致传输的字符串左右两侧出现一些空格,此时不能让这些左右两侧的空格保存在数据库中,不然如果是用户的密码的话,用户后面就没法认证了,而且如果出现了这种问题还很难查出来问题所在,因为空格不可显。此时就可以用trim剪掉两边的空格,来避免这些问题。

一些示例

下面的所有示例都要用到刚刚讲的一些内置函数。

要求显示exam_result表中的信息,显示格式:“XXX的语文是XXX分,数学XXX分,英语XXX分"

下面的两个例子,基于这张表的:
在这里插入图片描述

就是改一下打印格式,打印的时候不要像上面表中那样分格打印,而是全部拼接到一块,假如说是为了发短信要这样搞。

直接用一个concat:
在这里插入图片描述
但是这样搞出来很难看,加点东西:
在这里插入图片描述
这样就可以将所有的内容拼接一块发出去,没人对应一条信息。

求学生表中学生姓名占用的字节数

其实就是用length。
在这里插入图片描述

还是因为utf8中一个汉字3个字节。

再强调一下:length函数返回字符串长度,以字节为单位。如果是多字节字符则计算多个字节数;如果是单字节字符则算作一个字节。比如:字母,数字算作一个字节,中文表示多个字节数(与字符集编码有关)

将EMP表中所有名字中有S的替换成’上海’

下面的三个例子基于我前一篇中搞的这张表:
在这里插入图片描述

将EMP表中所有名字中有S的替换成’上海’,就是用replace:
在这里插入图片描述
这些内置函数并不会影响原表中的数据。

截取EMP表中ename字段的第二个到第三个字符

不能用left或者right,二者取不到中间的数,不过嵌套调用也能实现,不过比较麻烦。

用substring,这个函数前面没说,其实就和C++中string的substr一样,取子串的。
在这里插入图片描述

以首字母小写的方式显示所有员工的姓名

嵌套调用一下:
在这里插入图片描述
其中substring如果没有给第三个参数,就会将指定子串位置后面的所有子串全部返回。

用left拿到第一个字符,然后转成小写,再和后面的字符串拼接。

数学函数

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

演示一下:

abs

求绝对值的:
在这里插入图片描述

bin

求二进制的:

在这里插入图片描述

hex

求十六进制的:

在这里插入图片描述

conv(num, from_base, to_base)

指定num从from_base进制转换成to_base进制:

在这里插入图片描述
其实这里覆盖了前面的两个进制转换。

ceiling 和 floor

一个向上取整(ceiling,天花板的意思),一个向下取整(floor,地板)。说说啥意思。这两个都是针对小数的。

向上取整:只要有小数部分,就直接取大的值,比如说2.1,就直接直接转成3。转成最近的大的数。再比如说-2.1,那就回转成-2,转成比原数大的最近的整数,也就是-2。看这张图:
在这里插入图片描述
如果是2.5,向上取整就是3,如果是-2.9,线上取整为-2。
这就是向上取整。

向下取整,只要有小数,就取小的值,比如说下图中2.1,取的是2,-2.1取的是-3:
在这里插入图片描述
如果是-2.9,向下取整为-3,如果是2.9,向下取整为2。

看这两个函数的例子,向上的:
在这里插入图片描述

向下的:
在这里插入图片描述

还有两中取整,一种是0向取整,还有一种是小学都学过的四舍五入。

0向取整,其实也很常见,就是直接舍弃掉小数部分,在C语言中很常见,比如两个整数的除法,9/2,得到的数应该是4.5,但是语言中是直接去掉0.5,得到4。再比如说-3.6,0向取整就是-3,图是这样的:
在这里插入图片描述

format(一个小数, 指定小数位数)

这个是对于小数有用,指定多少位小数:
在这里插入图片描述

上面就是保留两位小数。

再来个保留五位小数的:
在这里插入图片描述

mod

取模的函数:
在这里插入图片描述
关于负数取模咋做的我这里就不说了,重点不在这,不会的同学自行搜一搜。

rand

产生随机数的函数,产生的数的范围是[0, 1.0):
在这里插入图片描述

如果你想要你指定范围的数,乘以几然后加加减减就行,比如说我想要0 ~ 100的:
在这里插入图片描述

如果不想要小数部分就直接用format:
在这里插入图片描述

其他函数

user

查询当前以什么身份登录:
在这里插入图片描述

database

当前选中的是哪个数据库:
在这里插入图片描述

md5

加密的东西,其实也不算加密,就是形成一个数据摘要,我前面在讲HTTPS的时候带过一嘴:
在这里插入图片描述
这个函数会形成一个摘要,所有的字符串形成的摘要都是等长的,但基本上不可能出现两个不同字符串产生相同摘要的情况,但是同一个字符串的摘要是相同的:
在这里插入图片描述

两个字符串哪怕是差了一个字符结果也都会相差很多:
在这里插入图片描述

一般数据库中不会直接保存用户的登录密码,一般都是先形成摘要然后再保存到数据库中,这样如果数据库被黑了,其中的数据黑客拿到后没法轻松的获取到用户的密码,这样用户的重要信息就不会泄漏。用户登录的时候是用密码先形成摘要,然后如果数据库有这个摘要就会登陆成功,如果没有这个摘要就认证失败。

还有一个password函数:
在这里插入图片描述

形成的摘要更长,password用的也是比md5多一点。

password形成的摘要也都是等长的。

ifnull(val1, val2)

这个函数和三木运算符有点像,如果val1是NULL就会返回val2,如果不是NULL就会返回val1,就好比val1 == NULL ? val2 :val1。

例子:
在这里插入图片描述

在这里插入图片描述
这个函数有些地方还是很有用的,我下一篇讲符合查询的时候就会用到。

这篇就介绍这么多。

到此结束。。。

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

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

相关文章

2024年测试程序员必看系列之自动化测试框架

自动化测试框架概念 自动化测试框架是一个集成体系,这个体系中包含测试功能的函数库、测试数据源、测试对象以及可重用的模块。 框架(framework)是一个框子——指其约束性,也是一个架子——指其支撑性。是一个基本概念上的结构&…

如何优雅的避免空指针异常

文章目录 1.数据准备2.实战:获取用户所在的城市2.1.直接获取;容易出现空指针异常。2.2.使用if-else判断;避免了出现空指针的问题,但是代码结构层次嵌套多,不美观2.3.使用工具类美化一下if判断代码2.4.使用Optional解决…

如何用CHAT理解数理化?

问CHAT:扇形面积的概念,简单阐述一下。 CHAT回复: 扇形面积是指扇形这种二维几何图形所覆盖的区域大小。 扇形是一个圆的一部分,是由圆心出发的两条射线(半径)和这两条射线所夹角决定的圆周上的弧线所围成…

创建域名邮箱邮件地址的方法与步骤

如何创建域名邮箱邮件地址?使用Zoho Mail创建域名邮箱邮件地址的步骤简单易懂,操作便捷。从其他邮箱迁移到Zoho Mail的过程也相当顺畅,您可以轻松为所有员工创建具有企业邮箱域名的电子邮件地址。 步骤1:添加并验证您的域名 首先&#xff0c…

动态跳过测试用例

动态跳过测试用例 说明 我们可以通过指定环境变量来动态判断是否执行指定的测试用例设置环境变量有很多种方法,例如命令行方式,格式:--env keyval1,key2val2 ,若需要指定多个环境变量则需要逗号来隔开,而不是空格 t…

麒麟信安与MatrixOne完成兼容互认

近日,超融合异构云原生数据库MatrixOne企业版软件V1.0完成了与欧拉开源操作系统(openEuler简称“欧拉”)、麒麟信安操作系统系列产品和虚拟化平台的相互兼容认证,通过了欧拉兼容性测评,获得了《openEuler技术测评证书》…

Latex中文论文模板A4双栏,适用课程论文

文章目录 说明实现效果1.引入库2.摘要3.参考文献4.中文伪代码 模板下载 说明 在写课程论文的时候用了latex,将模板整理在这里,里面还有一些没有完善的地方,如图注、表格等。 该模板的主要使用点是,包含了摘要、正文双栏格式、中…

运动器材经营配送小程序商城效果如何

运动是每天不可少的,公园、健身房随处可见健身的人,在家庭场景中也有不少人会购买运动器材直接运动,如哑铃、跑步机、单车等都有较高的需求,这对于运动器材经销商或品牌来说是生意增长的机会,由于价格不算很高&#xf…

ubuntu18.04安装并运行ORB-SLAM2

查看版本号 lsb_release -a 换源 Ubuntu系统自带的源都是国外的网址,国内用户在使用的时候下载比较慢甚至无法获取,需要替换成国内的镜像源 备份源文件 sudo cp /etc/apt/sources.list /etc/apt/sources.list.old 打开文件 sudo gedit /etc/apt/so…

城市交通领域的新趋势:地铁列车可视化

随着城市化进程的不断加速,地铁作为一种便捷、快速的城市交通方式,受到了越来越多人的青睐。地铁列车可视化,作为地铁运营管理中的一项重要工作,不仅可以提高列车运行效率和安全性,还可以为乘客提供更加舒适、便捷的乘…

vue动态获取目录结构进行配置静态路由

文章目录 前言定义项目页面格式一、vite 配置动态路由新建 /router/utils.ts引入 /router/utils.ts 二、webpack 配置动态路由总结如有启发,可点赞收藏哟~ 前言 项目中动态配置路由可以减少路由配置时间,并可减少配置路由出现的一些奇奇怪怪的问题 路由…

nginx配置-超详细

背景 安装nginx之后,会自动生成很多的文件,但是nginx.conf这个文件是我们的核心,如何去正确的修改和优化它是nginx的核心。在配置之前,需要看懂它的配置。鉴于经常需要配置,再次记录一下 一、nginx的默认配置 #user …

数据库管理-第117期 拿下19c OCM(202301121)

数据库管理-第117期 拿下19c OCM(202301121) 经过漫长的等待,确切来说是过了整整六周,(以前一般就3-4周出成绩,大多数是3周),而且这次是在OCP(Oracle Certification Pro…

微信小程序面试题【100道】

文章目录 小程序面试题100问前言一、技术性问题1.有哪些参数传值的方法2.小程序修改数据值与Vue和React有什么差异3.如何实现下拉刷新与上拉加载4.bindtap和catchtap的区别是什么5.小程序有哪些导航API,它们各自的应用场景与差异区别是什么6.小程序中如何使用第三方…

如何使用 RTLS?

RTLS 的不同应用几乎是无限的。毕竟,几乎任何人都可以从更好地了解事物的实时变化中受益。位置数据的一般价值导致了各种各样的最终用途应用,从制造工作跟踪、库存管理、堆场管理、供应链和物流,到医疗保健、动物跟踪以及采矿和采矿业人员的安…

二百零五、Flume——数据流监控工具Ganglia单机版安装以及使用Ganglia监控Flume任务的数据流(附流程截图)

一、目的 Flume采集Kafka的数据流需要实时监控,这时就需要用到监控工具Ganglia 二、Ganglia简介 Ganglia 由 gmond、gmetad 和 gweb 三部分组成。 (一)第一部分:gmond gmond(Ganglia Monitoring Daemon)…

PHP中cookie与session使用指南

PHP中cookie与session使用指南 Cookie和session的出现,是为了解决http协议无状态交互的窘境,它们都用于存储客户端的相关信息 0x01 Cookie使用 简介 Cookie 是一种在客户端存储数据的机制,通常用于记录用户的状态和偏好。下面将介绍如何在…

电视机顶盒哪个牌子好?2023年终盘点网络电视机顶盒排名

2023年很快就要过去了,小编今天要盘点的是年度网络电视机顶盒排名,通过对比品控、配置、系统、操作、广告等方面后,我们从十多款入围的产品中精选了五款整理成网络电视机顶盒排名,想知道电视机顶盒哪个牌子好看这篇就足够了。 1、…

基于SVM的车牌识别算法

基于SVM的车牌识别系统(Python代码实现) 车牌识别系统是智能交通系统的重要组成部分,有着广泛的应用。车牌识别系统主要有车牌定位、字符分割和字符识别三部分组成,本文的研究重点是车牌字符识别这部分,本文提出了一种…

每日一练 | 华为认证真题练习Day134

1、开启标准STP协议的交换机可能存在哪些端口状态?(多选) A. Discarding B. Listening C. Disabled D. Forwarding 2、下列路由协议中优先级最高的是? A. Direct B. RIP C. OSPF D. Static 3、参考如图所示的输出结果&…