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` 的值
相关推荐
画中有画7 分钟前
时序数据库在物联网系统中的应用
数据库·物联网·时序数据库
Decay__6 小时前
05_MySQL 常用 SQL 大全 —— 诊断、管理、优化辅助 SQL 与三大系统库速查
运维·数据库·sql·mysql·架构
小徐不徐说11 小时前
C++ 接口与插件设计:从工厂注册到 Qt 动态插件
数据库·c++·qt·系统架构·程序设计
论文复现现场11 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算
Decay__12 小时前
04_MySQL DBA 日常运维手册 —— 会话管理、锁与阻塞、事务监控、慢查询与日志巡检
运维·数据库·sql·mysql·架构
心梦缘-雪雁13 小时前
SQL Server 查询数据存在哪个表里
数据库
lusklusklusk14 小时前
Python 巡检脚本:进程运行状态、数据库写入时效检查及邮件通知与告警
数据库·python·oracle
GeW15 小时前
产业新优势基础软件的人才底盘,从Linux与数据库开始
linux·数据库
SelectDB15 小时前
Doris Arrow Flight SQL 高速读取协议实战:与 Snowflake 客户端取数链路对照
大数据·数据库·数据分析
曼岛_15 小时前
[图解密码学]第4章 古典密码
java·数据库·密码学