目录
前言
呼,也是在今天忙完了一个月的期末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` 的值 ``` 