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的第一个位置开始截取两个字符

  • 以首字母小写的方式显示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) 从第一个位置开始,截一个字符

三、数学函数

  • ceiling(number) 向上去整

  • floor(number) 向下去整

 一般取整的时候是进行 四舍五入 取整,但是除了四舍五入还有其他的取整方式。我们把丢弃小数部分的取整方式称为向0取整,以前我们在 C 学的 9 / 2 = 4 就是向0取整,还有向大的方向取的向上取整、向小的方向取的向下取整

案例:

  • 绝对值

    sql 复制代码
    select abs(-100.2);
  • 向上取整

    sql 复制代码
    select ceiling(23.04);
  • 向下取整

    sql 复制代码
    select floor(23.7);
  • 保留 2 位小数位数(小数四舍五入)

    sql 复制代码
    select format(12.3456, 2);
  • 产生随机数

    sql 复制代码
    select rand();

四、其它函数

  • 查询当前用户
sql 复制代码
SELECT user();
  • 显示当前正在使用的数据库
sql 复制代码
SELECT database();
  • 一个字符串进行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

  • 如果 val1 为null,返回 val2 ,否则返回 val1 的值(和三目运算符比较像)
sql 复制代码
SELECT IFNULL(val1, val2); -- 如果 `val1` 为 `NULL`,返回 `val2`,否则返回 `val1` 的值
相关推荐
2603_965148114 小时前
如何解析JSON数据?API返回的商品信息处理教程
开发语言·数据库·python·自动化·json·api
ltl4 小时前
RocksDB 经典故障排查:L0、compaction 与 write stall
数据库
xfhuangfu5 小时前
Oracle中建立到CDB和PDB的连接
数据库·oracle·rpc
小小龙学IT6 小时前
DuckDB 深度实战:用 C++ 在进程内跑一个「分析型数据库」
数据库·c++
NineData6 小时前
DTCC 2026 预告|NineData CEO& 创始人叶正盛:面向 AI Agent 的数据库 DevOps 与数据复制实践
数据库·人工智能·数据库开发·devops·ninedata·数据库技术·dtcc
J_bean6 小时前
MySQL 事务是否必须手动开启?
数据库·mysql·数据库事务·自动提交·手动提交
J_bean7 小时前
MySQL InnoDB 如何检测死锁、判定死锁、处理死锁
数据库·mysql·死锁·死锁检测·处理死锁·死锁判定
浪子明X7 小时前
从 MongoDB 文档到关系模型:构建可重跑、可对账的数据迁移流水线
数据库·mongodb·oracle
杜子不疼.7 小时前
国产数据库撑起固井软件自主化:金仓 × 中海油服「海恒 Cemsol」落地解析
数据库
隔窗听雨眠7 小时前
GBase 8s并发控制深度解析:封锁机制、隔离级别与死锁处理全攻略
服务器·数据库·oracle