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` 的值
相关推荐
xiezhr8 小时前
逛GitHub发现了一款免费的带AI功能的数据库管理工具
数据库·ai编程·dba
唐青枫1 天前
MySQL JSON 实战详解:从存储、查询、更新到 JSON_TABLE 与索引
sql·mysql
吃糖的小孩1 天前
给 QQ AI 机器人设计“可控记忆”:会话摘要、手动长期记忆与角色卡边界
数据库
小满8781 天前
5.Mysql事务隔离级别与锁机制
mysql
笃行3502 天前
金仓数据库数据安全双防线:静态存储加密与传输加密实战
数据库
笃行3502 天前
金仓数据库物理备份实战:sys_rman 全流程演练与误覆盖抢救
数据库
笃行3502 天前
金仓数据库逻辑备份实战:从全库导出到 Schema 替换的完整闭环
数据库
元Y亨H2 天前
技术笔记:MySQL 字符集排序规则与大小写敏感性问题解决方案
mysql
SelectDB3 天前
阶跃星辰基于 SelectDB 构建 PB 级 Agent 可观测平台
大数据·数据库·aigc