MySQL笔记---内置函数
MySQL 内置函数是预先定义在数据库中的函数,可直接用于数据处理、计算或逻辑判断,极大简化了 SQL 语句的编写。
1. 字符串函数
用于处理字符串类型数据,常见功能包括拼接、截取、转换等。
函数 | 功能描述 |
CONCAT(s1, s2, ...) | 连接多个字符串,若有 NULL 则结果为 NULL |
CONCAT_WS(sep, s1, s2, ...) | 用分隔符 sep 连接字符串(忽略 NULL) |
SUBSTRING(str, pos, len) | 从 str 的 pos 位置(从 1 开始)截取长度为 len 的子串 |
LENGTH(str) | 返回字符串的字节长度(受字符集影响,如 UTF8 中汉字占 3 字节) |
CHAR_LENGTH(str) | 返回字符串的字符个数(与字符集无关) |
UPPER(str) / LOWER(str) | 转换为大写 / 小写 |
TRIM(str) | 去除字符串首尾空格(LTRIM 去左空格,RTRIM 去右空格) |
REPLACE(str, old, new) | 将 str 中所有 old 替换为 new |
2. 数值函数
用于数值计算,如取整、求余、四舍五入等。
函数 | 功能描述 |
ABS(n) | 返回 n 的绝对值 |
CEIL(n) / FLOOR(n) | 向上取整 / 向下取整(返回整数) |
ROUND(n, d) | 对 n 四舍五入,保留 d 位小数(d 默认为 0) |
MOD(n, m) | 求 n 除以 m 的余数(同 n % m) |
RAND() | 生成 0~1 之间的随机浮点数(乘以N,则得到0到N之间的随机数) |
3. 日期时间函数
函数 | 功能描述 |
NOW() / SYSDATE() | 返回当前日期时间(NOW() 取语句开始时间,SYSDATE() 取函数执行时间) |
CURDATE() / CURRENT_DATE() | 返回当前日期(仅日期部分) |
CURTIME() / CURRENT_TIME() | 返回当前时间(仅时间部分) |
YEAR(date) / MONTH(date) / DAY(date) | 提取日期中的年 / 月 / 日 |
DATEDIFF(date1, date2) | 计算 date1 - date2 的天数差(结果可为负数) |
TIMESTAMPDIFF(unit, start, end) | 按 unit(如 HOUR、MINUTE)计算 end - start 的差值 |
DATE_ADD(date, INTERVAL expr unit) | 给日期添加时间间隔(DATE_SUB 为减去) |
4. 聚合函数
用于对一组数据进行统计计算(常与 GROUP BY
配合使用)。
函数 | 功能描述 |
COUNT(*) | 统计行数(包含 NULL) |
COUNT(列名) | 统计指定列非 NULL 的行数 |
SUM(列名) | 计算指定列的总和(仅数值型) |
AVG(列名) | 计算指定列的平均值 |
MAX(列名) | 取指定列的最大值 |
MIN(列名) | 取指定列的最小值 |
5. 控制流函数
用于逻辑判断,类似编程语言中的条件分支。
函数 | 功能描述 |
IF(expr, v1, v2) | 若 expr 为真(非 0 非 NULL),返回 v1,否则返回 v2 |
IFNULL(v1, v2) | 若 v1 为 NULL,返回 v2,否则返回 v1(仅判断 NULL) |
NULLIF(expr1, expr2) | 若 expr1 = expr2,返回 NULL,否则返回 expr1 |
6. 其他常用函数
函数 | 功能描述 |
COALESCE(v1, v2, ...) | 返回第一个非 NULL 的值(若全为 NULL 则返回 NULL) |
VERSION() | 返回当前 MySQL 版本号 |
USER() | 返回当前登录用户(格式:user@host) |
DATABASE() | 返回当前会话中正在使用的数据库名称(若未选择数据库,则返回 NULL) |
MD5(str) | 计算字符串 str 的 MD5 哈希值,返回一个 32 位的十六进制字符串(若 str 为 NULL,则返回 NULL) |
MD5 是一种单向哈希算法,可将任意长度的字符串转换为固定长度的哈希值,常用于数据加密(如密码存储)或数据完整性校验。
MD5 哈希不可逆(无法从哈希值反推原始字符串),但由于其碰撞概率和安全性问题(可被暴力破解),不推荐用于现代密码存储,建议使用更安全的算法。
常用于校验数据是否被篡改(如文件校验)。