MySQL内置函数

目录

前言

一、日期函数

二、字符串函数

三、数学函数

四、其它函数


前言

呼,也是在今天忙完了一个月的期末qwq,也是有时间来更新博客啦!!算算日子也有一个月没更新了orz

居然已经是25年的最后一天了(也是可以凑时发出这张图片了hhh),那么就先在这里祝大家元旦快乐 啦,本篇就带来轻松一些的奖励关卡------mysql的一些内置函数~

一、日期函数

案例:

  • 获取当前日期
sql 复制代码
select current_date();
  • 获取当前时间
sql 复制代码
select current_time();
  • 获取当前时间戳
sql 复制代码
select current_timestamp();
  • 获取当前日期时间
sql 复制代码
select now();
  • 截断当前时间,只获得日期部分
sql 复制代码
SELECT date(now());
  • 在日期的基础上加日期
sql 复制代码
SELECT date_add(now(), interval 10 year);
  • 在日期的基础上减去时间
sql 复制代码
SELECT date_sub(now(), interval 10 minute);
  • 计算两个日期之间相差多少天
sql 复制代码
SELECT datediff(now(), '1949-10-01');

学了以上函数总得来个实际案例来试验一下

创建一张记录生日的表

sql 复制代码
CREATE TABLE tmp(
    id INT PRIMARY KEY AUTO_INCREMENT,
    birthday DATE NOT NULL
);

虽然 current_time() 这里显示的是时分秒,实际上插入的时候也能插入,所有的时间在获取的时候都是 年-月-日,时:分:秒,只不过显示时是不一样的。

创建一个留言表

sql 复制代码
CREATE TABLE msg(                           
    id INT PRIMARY KEY AUTO_INCREMENT,
    content VARCHAR(100) NOT NULL,
    sendtime DATETIME
);

显示所有留言信息,发布日期只显示日期

sql 复制代码
select content,date(sendtime) from msg;

然后我们查看2分钟内发的贴子

sql 复制代码
SELECT * FROM msg WHERE date_add(sendtime, interval 2 minute) > now();

二、字符串函数

instr其实就是类似于查找字串

上表只写了left,其实right也有,就是和left反过来

案例:

  • 获取 emp 表的 ename 列的字符集
sql 复制代码
SELECT charset(ename) FROM emp;

实际当中我们可以通过charset()函数来检查字符串乱码的问题

  • 连接字符串
sql 复制代码
SELECT concat(name, '的语文是', chinese, '分,', '数学', math, '分,', '英语', english, '分') FROM exam_result;
  • 求学生表中学生姓名占用的字节数
sql 复制代码
select length(name) from exam_result;

以前说过 mysql 的字符真的就是一个字符,utf8中一个汉字占3个字节。

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

  • 截取 exam_result 表中 name 字段的第一个到第二个字符
sql 复制代码
SELECT name, substring(name, 1, 2) FROM exam_result;

\^\] 从name的第一个位置开始截取两个字符 ![image-20251024171428042](https://i-blog.csdnimg.cn/img_convert/537eeb238e7430f653f0bf83036ee057.png) * 以首字母小写的方式显示emp标准所有员工的姓名 ```sql SELECT ename, concat(lcase(substring(ename, 1, 1)), substring(ename, 2)) FROM emp; ``` \[\^\]: 表示使用concat连接使用lcase来将substring截取的ename中的第一个字符变成小写和substring截取的ename第一个字符之后的字符串;**substring(ename, 1, 1) 从第一个位置开始,截一个字符** ![](https://i-blog.csdnimg.cn/direct/d3c1da342fb94b50b386ab4f963f319e.png) ## 三、数学函数 ![](https://i-blog.csdnimg.cn/direct/41c5fa7e34004e6785fcce8f8113fad5.png) * ceiling(number) 向上去整 * floor(number) 向下去整  一般取整的时候是进行 **四舍五入** 取整,但是除了四舍五入还有其他的取整方式。我们把丢弃小数部分的取整方式称为**向0取整**,以前我们在 C 学的 9 / 2 = 4 就是向0取整,还有向大的方向取的向上取整、向小的方向取的向下取整 ![image-20251025102632273](https://i-blog.csdnimg.cn/img_convert/2d332ae0a66b5c9dc501493b5e563c61.png) 案例: * 绝对值 ```sql select abs(-100.2); ``` ![image-20251024172313660](https://i-blog.csdnimg.cn/img_convert/eb113df9d95864a2bec1769feedaaba4.png) * 向上取整 ```sql select ceiling(23.04); ``` * 向下取整 ```sql select floor(23.7); ``` ![image-20251024172326682](https://i-blog.csdnimg.cn/img_convert/5a4387a07961b4664fdbf5e36c7d5b77.png) * 保留 2 位小数位数(小数四舍五入) ```sql select format(12.3456, 2); ``` * 产生随机数 ```sql select rand(); ``` ![image-20251024172423075](https://i-blog.csdnimg.cn/img_convert/08089497fea06d38e660e85c769111c6.png) ![](https://i-blog.csdnimg.cn/direct/9a5212ecc38840cbb85882bd1c83e826.png) ## 四、其它函数 * 查询当前用户 ```sql SELECT user(); ``` * 显示当前正在使用的数据库 ```sql SELECT database(); ``` ![](https://i-blog.csdnimg.cn/direct/78d75b8aef634364b33f095b2f75b707.png) * 一个字符串进行md5摘要,摘要后得到一个32位字符串 ```sql select md5(string); ``` > MD5 摘要是一种密码散列函数(Hash 函数),用于将任意长度的输入数据(如文本、文件等)转换为一个固定长度(128 位,通常表示为 32 个十六进制字符)的哈希值(摘要)。 > > 其核心特点包括: > > 1. **固定长度输出** :无论输入数据长度如何,输出的 MD5 摘要始终是 32 个十六进制字符(例如:`d41d8cd98f00b204e9800998ecf8427e` 是空字符串的 MD5 值)。 > > 2. **不可逆性**:从理论上讲,无法通过 MD5 摘要反推出原始输入数据(虽然存在碰撞攻击,但不影响不可逆性的本质)。 > > 3. **敏感性**:原始数据的微小变化(如一个字符的修改)会导致 MD5 摘要发生显著变化。 > > MD5 曾广泛用于数据完整性校验(如文件校验)、密码存储(将密码加密为 MD5 后存储,而非明文)等场景。但由于其存在碰撞漏洞(不同输入可能产生相同 MD5 值),目前已逐渐被更安全的 SHA-256 等算法替代,不再推荐用于安全性要求高的场景。 > > 例如,字符串 `hello world` 的 MD5 摘要是:`5eb63bbbe01eeed093cb22bb8f5acdc3`。 ![image-20251024172906230](https://i-blog.csdnimg.cn/img_convert/a741f1319a781a59f580ef257ab5e2e0.png) ![image-20251025105859716](https://i-blog.csdnimg.cn/img_convert/6129a9d0462b2a52fab6fd04a4b71fa8.png) * 如果 val1 为null,返回 val2 ,否则返回 val1 的值(和三目运算符比较像) ```sql SELECT IFNULL(val1, val2); -- 如果 `val1` 为 `NULL`,返回 `val2`,否则返回 `val1` 的值 ``` ![image-20251024173043382](https://i-blog.csdnimg.cn/img_convert/1face6278ea53a6f1cddf3e210bd46d3.png)

相关推荐
·云扬·2 小时前
InnoDB Cluster 常见管理命令
数据库·mysql
黎明破晓.2 小时前
MySQL基础
数据库·mysql
电商API&Tina2 小时前
【电商API接口】多电商平台数据API接入方案(附带实例)
运维·开发语言·数据库·chrome·爬虫·python·jenkins
秦明月133 小时前
EPLAN电气设计:图层导入与导出操作指南
数据库·经验分享·学习·学习方法·设计规范
奋斗べ青年.3 小时前
【redis】了解redis的主从和集群搭建
数据库·redis·缓存
麦聪聊数据3 小时前
敏感数据安全吗?基于字段级血缘的 PII 数据全链路追踪
数据库·sql·安全
田里的水稻3 小时前
BI_双足机器人舞蹈动作的sim2sim和sim2Real(Gymnasium + Mujoco)
服务器·数据库·机器人
酸菜牛肉汤面3 小时前
15、联合索引是什么?为什么需要注意联合索引中的顺序?
数据库
在风中的意志4 小时前
[数据库SQL] [leetcode-511] 511. 游戏玩法分析 I
数据库·sql·游戏