【MySQL 保姆级教学】内置函数(9)
内置函数
- 1. 日期函数
- 1.1 日期函数的种类
- 1.2 示例
- 1.3 日期的转换
 
- 2. 字符串函数
- 2.1 种类
- 2.2 示例
 
- 3. 数学函数
- 3.1 种类
- 3.2 向上取整和向下取整
- 3.3 示例
 
- 4. 其他函数
- 4.1 查询当前用户/数据库
- 4.2 ifnull(val1,val2)
- 4.3 md5()函数
- 4.4 password()函数
 
1. 日期函数
1.1 日期函数的种类
| 函数名称 | 说明 | 
|---|---|
| current_date() | 返回当前日期 | 
| current_time() | 返回当前时间 | 
| current_timestamp() | 返回时间戳(日期和时间) | 
| now() | 返回当前时间 | 
| date(datetime) | 返回datetime参数的时间部分 | 
| date_add(date, interval d_value_type) | 在d_value_type值上添加时间或日期,interval后的单位可以是:year,day,minute,second | 
| date_sub(date, interval d_value_type) | 在d_date_type值上添加时间或日期,interval后的单位可以是:year,day,minute,second | 
| datediff(date1, date2) | 两个日期的差(date1-date2) | 
now()和current_timestamp()的区别:
- now()返回当前日期和时间,数据类型为- DATETIME;- current_timestamp()返回当前日期和时间,数据类型为- TIMESTAMP。
- now()返回的是服务器的本地时间;- current_timestamp()返回的是服务器的本地时间,但在某些上下文中可能会自动转换为客户端的时区。
为什么需要 interval?
- 明确性:
 interval 参数明确了你要增减的时间单位和数量,使得函数的行为非常明确。例如,INTERVAL 1 DAY 表示增加一天,而 INTERVAL 2 HOUR 表示增加两个小时。
- 灵活性:
 通过使用 interval,你可以灵活地增减不同单位的时间。这包括天、小时、分钟、秒、月、年等。
- 可读性和维护性:
 使用 interval 使代码更具可读性和维护性。其他开发人员可以很容易地理解你在做什么,而不需要猜测。
1.2 示例
-  获取当前日期(年月日) 
 命令:select current_date();
  
-  获取当前时间 
 命令:select current_time();
  
-  获取当前日期和时间 
 命令:select now();
  
-  获取当前时间戳(日期和时间) 
 命令:select current_timestamp();
  
-  在日期的基础上加上时间 
 命令:select date_add('2020-10-1', interval 10 day);
  
-  在日期的基础上减去时间 
 命令:select date_sub('2020-10-1', interval 10 day);
  
-  两个时间相减,左-右,返回的单位是天 
 命令:select datediff('2024-10-10', '2020-8-8');
  
1.3 日期的转换
-  创建一个留言板 
 命令:create table comment( 
 id int primary key auto_increment,
 comment text,
 sendtime datetime
 ); 
-  插入数据 
 命令:insert into comment(comment, sendtime) 
 values(‘放假啦’,now()),
 (‘一起出去玩吧’,now()); 命令: insert into comment (comment, sendtime) values('好的,约个地点吧', current_date());
  命令: insert into comment(comment, sendtime) values('去哪玩呢?', current_time());
  命令: insert into comment(comment, sendtime) values('去游乐场吧', current_timestamp);
  
-  查询在两分钟内发布的帖子 
 命令:select comment from comment where date_add(sendtime, interval 2 minute) > now();或命令: select comment from comment where date_sub(now(), interval() 2 minute) < sendtime;
  
同学们有没有发现,我们的comment表中comment字段设置的是datetime类型,而在插入的过程中有current_date(),current_time(),current_timestamp()。
 这样类型的数据差进去后还是datetime类型吗?
命令:select * from comment;
 
DATETIME 类型的列可以接受 CURRENT_DATE()、CURRENT_TIME() 和 CURRENT_TIMESTAMP() 函数返回的值,因为这些函数返回的值可以被隐式转换为 DATETIME 类型。以下是对每个函数的详细解释以及它们如何与 DATETIME 类型交互:
- current_date返回值是date日期,当将 CURRENT_DATE() 的值插入到 DATETIME 列时,数据库会自动将 DATE 值转换为 DATETIME 值,通常会将时间部分设置为 00:00:00。
- current_time返回值是time时间,当将 CURRENT_TIME() 的值插入到 DATETIME 列时,数据库会自动将 TIME 值转换为 DATETIME 值,通常会将日期部分设置为current_date()的值。
- current_timestamp()的返回值是时间戳(格式是datetime类型),当将 CURRENT_TIMESTAMP() 的值插入到 DATETIME 列时,数据库会直接使用返回的 TIMESTAMP 或 DATETIME 值。
默认行为:
- 数据库系统通常会尽量避免数据丢失,因此它会尝试将不同类型的日期/时间数据转换为 DATE类型,而不是直接拒绝插入。
具体的转换还是根据MySQL的版本。
为了表示数据的准确,可以使用date(time/datetime/timestamp)函数进行日期提取
2. 字符串函数
2.1 种类
| 函数名称 | 说明 | 
|---|---|
| charset(str) | 返回字符串的字符集 | 
| collation(str) | 返回字符串的校验集 | 
| concat(string [,…]) | 连接字符 | 
| instr(string, substring) | 返回substring在string中的位置 | 
| ucase(string) | 转换成大写 | 
| lcase(string) | 转换成小写 | 
| left(string, length) | 从string左边开始取length多个字符 | 
| right(string, length) | 从string右边开始取length多个字符 | 
| length(string) | string的长度 | 
| replace(str, searth_str, replace_str) | 把str中的search_str替换成replace_str | 
| strcmp(string1,string2) | 逐字比较字符串string1和string2的大小 | 
| substring(string, position [, length]) | 从position开始取leng个字符,没有length则从position到末 | 
| ltrim(string) | 去掉string左边的空格 | 
| rtrim(string) | 去掉string右边的空格 | 
| trim(string) | 去掉string左右两边的空格 | 
2.2 示例
-  获取 t1表的id字段的字符集和校验集
 命令:select charset(id), collation(id) from t1;
  
-  concat()拼接字符串
 命令:select concat(name, '的分数是:',score) from t1;
  
 如果拼接的字段有一行为空,则该行直接显示为空
-  t1表中,姓名占用的字节数 
 命令:select length(name) from t1;
  
 length函数返回字符串长度,以字节为单位。如果是多字节字符则计算多个字节数;
 如果是单字节字符则算作一个字节。比如:字母,数字算作一个字节,中文表示多个字节数
 (与字符集编码有关);使用utf8时,一个汉字占3个字节;使用gbk时,一个汉字占2个字节。
-  把t1b表姓名中的‘李’替换成‘li’ 
 命令:select replace(name, '李', 'li') from t1;
  
-  截取姓名的第2到第三个字符(相当于下标从1开始)。 
 substring(string, position, length):从position开始的length个字符(包含position)
 命令:select substring(name, 2,2) from t1;
  
 如果字段从第二个字符开始不足两个字符,则取一个字符。
-  把t2表的name字段的x姓和名分开打印,姓转换为大写,名为小写 
 命令:select ucase(substring(name, 1, 1)), lcase(substring(name, 2)) from t2;
  
-  instr(string, substring),返回substring在string中出现的位置 
 命令:select instr('abcdefg', 'bc');
 命令:select instr(''abcdefg, 'abcd');
  
 同学们可以发现,返回的是查询到substring的首位置。string的下标从1开始。
-  清空字符串的空格 
 清空左边空格命令:select ltrim(' 你好 ! ');
 清空右边空格命令:select rtrim(‘ 你好 ! ’);
 清空两边空格命令:select trim(' 你好 ! ');
 字符串包含的空格清楚不了。
  
3. 数学函数
3.1 种类
| 函数名称 | 说明 | 
|---|---|
| abs(number) | 绝对值函数 | 
| bin(decimal_number) | 十进制转换成二进制 | 
| hex(decimal_number) | 十进制转换成十六进制 | 
| conv(number, from_number, to_number) | 进制转化 | 
| ceiling(number) | 向上取整 | 
| floor(number) | 向下取整 | 
| format(number,decimal_replace) | 格式化,保留小数位数 | 
| rand() | 返回随机浮点数,范围[0.0, 1.0) | 
| mod(number,denominator) | 取模,求余 | 
| md5(str) | 生成32位的唯一标识符 | 
3.2 向上取整和向下取整
向上取整 (Ceiling)
- 定义:向上取整是指将一个浮点数转换为大于或等于该浮点数的最小整数。
- 符号:通常用 ceil 表示。
- 数学表示:ceil(x) 返回不小于 x 的最小整数。
向下取整 (Floor)
- 定义:向下取整是指将一个浮点数转换为小于或等于该浮点数的最大整数。
- 符号:通常用 floor 表示。
- 数学表示:floor(x) 返回不大于 x 的最大整数。

使用t3表:
 
向上取整命令:select ceiling(score) from t3;
 
向下取整命令:select flooor(score) from t3;
 
3.3 示例
-  绝对值函数abs() 
 命令:select abs(-111.11);
  
-  保留两位小数,foemat(number, n), n是保留小数位的个数 
 命令:select format(score, 2) from t3;
  
-  rand()产生随机数。 
 产生0-99的随机数:select rand()*100;
  产生0-999的随机数: select rand()*1000;
  
-  十进制转换为二进制 
 命令:select bin(64);
  
-  十进制转化为十六进制 
 命令:select hex(64);
  
-  取模,求余 
 命令:select mod(100,3);
  
4. 其他函数
4.1 查询当前用户/数据库
- 查询当前用户
 命令:seelct user()
  
- 查询当前数据库
 命令:select database();
  
4.2 ifnull(val1,val2)
ifnull(val1, val2) 如果val1为null,返回val2,否则返回val1的值
 示例:
- 命令:select ifnull(null,'为空');

- 查询t2表的姓名,如果姓名为空,则替换为’未输入名字’
 命令:select ifnull(name, '未输入名字') from t1;
  
4.3 md5()函数
MySQL 中,MD5 哈希函数主要用于生成数据的哈希值。虽然 MD5 在密码存储和高安全性要求的应用中已经不被推荐使用,但在某些情况下,它仍然可以用于数据完整性验证、简单的数据加密或生成唯一标识符等场景。
MD5 在 MySQL 中的作用
- 数据完整性验证:
 通过计算数据的 MD5 哈希值,可以验证数据在传输过程中是否被篡改。
 例如,在文件上传或下载时,可以通过比较文件的 MD5 值来确保文件的完整性。
- 简单的密码存储:
 尽管不推荐,但在一些旧系统中,MD5 仍然用于存储用户密码的哈希值。
 现代系统应使用更强的哈希算法(如 SHA-256 或 bcrypt)并结合盐(salt)来存储密码。
- 生成唯一标识符:
 可以使用 MD5 生成数据的唯一标识符,例如在生成 URL 缩短服务中的短链接时。
- 数据去重:
 通过计算数据的 MD5 哈希值,可以快速检测和删除重复的数据记录。
示例:
-  把字符串生成哈希值 
 命令:select md5('abcdefg');
  
-  这是一个把密码加密的场景。 password()函数的加密程度更高。
 md5(str)对一个字符串进行md5摘要,摘要后得到一个32位字符串创建表t4,命令: create table t4( 
 id char(11) primary key ,
 password char(32) - - MD5摘要后是32位的字符串
 ); 插入MD5数据,命令: insert into t4 
 values(‘111’, md5(‘111’)),
 (‘222’,md5(‘222’)),
 (‘333’, md5(‘333’)); 
 查看全部数据
  where查询 
 命令:select id, password from t4 where id='111'and password=md5('111');
  
4.4 password()函数
在 MySQL 中,PASSWORD() 函数用于计算和返回一个字符串的哈希值,这个哈希值是 MySQL 用于存储用户密码的格式。PASSWORD() 函数生成的哈希值是一个 41 字符的字符串,通常用于 MySQL 用户认证。
PASSWORD() 函数的作用
- 生成密码哈希: - PASSWORD() 函数接受一个字符串作为输入,并返回该字符串的哈希值。这个哈希值是使用 MySQL 内部的算法生成的。
- 生成的哈希值是一个 41 字符的字符串,格式为 *<hash_value>,其中 <hash_value> 是实际的哈希值。
 
- 用户认证: - 在 MySQL 中,用户的密码通常是通过 PASSWORD() 函数进行哈希处理后存储在 mysql.user 表中的 password 列中。
- 当用户尝试登录时,MySQL 会将用户提供的密码通过 PASSWORD() 函数进行哈希处理,并与存储在 mysql.user 表中的哈希值进行比较,以验证用户的身份。
 
示例:
- 命令:select password('111');
  
相关文章:
 
【MySQL 保姆级教学】内置函数(9)
内置函数 1. 日期函数1.1 日期函数的种类1.2 示例1.3 日期的转换 2. 字符串函数2.1 种类2.2 示例 3. 数学函数3.1 种类3.2 向上取整和向下取整3.3 示例 4. 其他函数4.1 查询当前用户/数据库4.2 ifnull(val1,val2)4.3 md5()函数4.4 password()函数 1. 日期函数 1.1 日期函数的种…...
 
华为大咖说丨如何通过反馈机制来不断优化大模型应用?
本文分享自时习知 作者:袁泉(华为AI数据工程专家)全文约3015字,阅读约需8分钟 大模型应用正式投入使用后,存在一个较为普遍的情况:在利用“大模型提升业务运营效率”的过程中,业务部门和IT团队…...
 
上海亚商投顾:沪指缩量震荡 风电、传媒股集体走强
上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 市场全天缩量震荡,三大指数集体收涨,北证50则跌超7%,超80只北交所个股跌逾…...
 
三磺酸-Cy3.5-羧酸在水相环境中表现良好,能够提高成像的清晰度和准确性
一、基本信息 中文名称:三磺酸-Cy3.5-羧酸,水溶性Cy3.5 羧基 英文名称:trisulfo-Cy3.5-carboxylic acid,trisulfo-Cy3.5-COOH,trisulfo-Cyanine3.5-COOH 分子式:C41H44N2NaO11S3- 分子量:85…...
 
国标GB28181视频平台EasyGBS国标GB28181软件实现无需插件的视频监控对讲和网页直播
在当今社会,视频监控已经成为公共安全、企业管理、智能城市建设等领域不可或缺的一部分。然而,由于不同厂家和平台之间的兼容性问题,视频监控系统的联网和整合面临巨大挑战。为了解决这个问题,国家制定了《公共安全视频监控联网系…...
 
mac nwjs程序签名公证(其他mac程序也一样适用)
为什么需要公证 mac os14.5之后的系统,如果不对应用进行公证,安装,打开,权限使用上都会存在问题,而且有些问题你强制开启(sudo spctl --master-disable)使用后可能会有另外的问题, …...
 
网络应用技术 实验一:路由器实现不同网络间通信(华为ensp)
目录 一、实验简介 二、实验目的 三、实验需求 四、实验拓扑 五、实验任务及要求 1、任务 1:完成网络部署 2、任务 2:设计全网IP 地址 3、任务 3:实现全网主机互通 六、实验步骤 1、在ensp中部署网络 2、配置各主机 IP地址、子网掩…...
 
使用 Qt GRPC 构建高效的 Trojan-Go 客户端:详细指南
使用 Qt GRPC 构建高效的 Trojan-Go 客户端:详细指南 初识 Qt 和 gRPC 什么是 Qt?什么是 gRPC? 项目结构概述创建 proto 文件定义 API 下载 api.proto 文件解析 proto 文件 1. package 与 option 语句2. 消息类型定义 TrafficSpeedUserUserSt…...
 
【mysql进阶】5-事务和锁
mysql 事务基础 1 什么是事务 事务是把⼀组SQL语句打包成为⼀个整体,在这组SQL的执⾏过程中,要么全部成功,要么全部失败,这组SQL语句可以是⼀条也可以是多条。再来看⼀下转账的例⼦,如图: 在这个例⼦中&a…...
 
指增和中性产品的申赎加减仓及资金调拨自动化伪代码思路
定义一些关键字代表的意义 STRUCT: 代表需要输入的格式化的信息IMPORT: 代表需要输入的外部信息, 这些信息通常是客观的SEARCH: 需要从某地比如数据库检索搜集信息SUM: 一种宏观的加和操作, 比如两个股票户ABAB,微观上实际还是有差异GROUP: …...
 
【论文分享】居住开放空间如何影响老年人的情感:使用可穿戴传感器的现场实验
本研究首次通过跟踪实时、高分辨率的环境暴露和情绪反应来研究和比较不同质量住宅社区中的居住开放空间(ROS)与老年人情绪之间关联;并采用混合方法,包括可穿戴传感器和问卷调查,收集了中国广州老年居民的客观和主观住宅…...
 
入门 | Prometheus+Grafana 普罗米修斯
#1024程序员节|征文# 一、prometheus介绍 1、监控系统组成 一个完整的监控系统需要包括如下功能:数据产生、数据采集、数据存储、数据处理、数据展示、分析、告警等。 (1)、数据来源 数据来源,也就是需要监控的数据…...
制作Ubuntu根文件系统
制作Ubuntu根文件系统: gunzip ubuntu-base-22.04.5-base-arm64.tar.gz mkdir ubuntu tar xvpf ubuntu-base-22.04.5-base-arm64.tar -C ubuntu 挂载目录、复制dns、执行chroot cd /userdisk/ubuntu cp /etc/resolv.conf ./etc/resolv.conf mount --bind /dev ./d…...
 
16个最佳测试管理工具(2024)
1、前言 测试管理解决方案能够帮助你捕捉测试需求、设计测试用例、生成测试执行报告、管理资源等。软件质量的疏忽可能导致公司遭受巨大的经济损失、声誉损害或面临诉讼风险。一个优秀的测试管理工具是防止缺陷和故障进入生产环节的关键。 2、PractiTest  功能特点&#x…...
 
基于知识图谱的猕猴桃种植技术问答系统
猕猴桃怎么种植更高效、病虫害怎么防治、最适宜的气候条件有哪些?作为一名科技研发迷,这些问题是不是听起来很有挑战性?咱们今天就来聊聊一个特别的研发项目——基于知识图谱的猕猴桃种植技术问答系统。这不仅仅是一个农业项目,它…...
 
Swift雨燕蜂窝无线通信系统介绍
本文博客链接:jdh99-CSDN博客,作者:jdh,转载请注明. 1. 概述 物联网小无线通信技术众多,其中大多是小范围小规模的无线通信技术,而行业难点是如何做到广覆盖、大容量、低功耗。 针对以上难点,宏讯物联研发了Swift雨燕蜂窝无线通信技术&…...
 
【ZZULI】数据库第二次实验
【ZZULI】数据库第二次实验 创建学生信息管理系统的数据库通过T-SQL语句创建学生表、课程表、选课表创建学生表创建课程表创建选课表 修改表结构。为SC表添加写的列,列名为备注修改备注列的数据长度。删除SC表的备注列。 通过T-SQL语句对表的列添加约束,…...
 
Javaee---多线程(一)
文章目录 1.线程的概念2.休眠里面的异常处理3.实现runnable接口4.匿名内部类子类创建线程5.匿名内部类接口创建线程6.基于lambda表达式进行线程创建7.关于Thread的其他的使用方法7.1线程的名字7.2设置为前台线程7.3判断线程是否存活 8.创建线程方法总结9.start方法10.终止&…...
 
Java后端面试内容总结
先讲项目背景,再讲技术栈模块划分, 讲业务的时候可以先讲一般再特殊 为什么用这个,好处是什么,应用场景 Debug发现问题/日志发现问题. QPS TPS 项目单元测试,代码的变更覆盖率达到80%,项目的复用性高…...
 
DC-1渗透测试
DC1 五个flag的拿取(截图是五个flag里面的内容) 注意事项:kali的用户名:root 密码:kali 注意:DC1 只要开机服务就起来了 思路:信息收集—> 寻找漏洞—> 利用漏洞(sql注入,文件上传漏洞…...
 
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
 
从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
 
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
 
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
 
佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...
 
Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合
作者:来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布,Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明,Elastic 作为 …...
 
C++_哈希表
本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说,直接开始吧! 一、基础概念 1. 哈希核心思想: 哈希函数的作用:通过此函数建立一个Key与存储位置之间的映射关系。理想目标:实现…...
