MySQL常用函数
一、字符串函数
函数 | 功能 |
---|---|
| 拼接字符串 |
| 指定分隔符拼接字符串 |
| 截取字符串 |
| 从左边截取指定长度字符串 |
| 从右边截取指定长度字符串 |
| 字符串字节长度(中文 3 字节,英文 1 字节) |
| 字符串字符长度(中英文都算 1 个) |
| 字符串替换 |
| 去除前后空格 |
| 字符串转小写 / 大写 |
| 查找子字符串首次出现位置(0 为不存在) |
| 左填充字符串 |
| 右填充字符串 |
二、数值函数
函数 | 功能 |
---|---|
ABS(x) | 取绝对值 |
CEIL(x) / FLOOR(x) | 向上取整 / 向下取整 |
ROUND(x, d) | 四舍五入,保留 d 位小数 |
MOD(x, y) | 取模运算(x % y) |
RAND() | 生成随机数 |
POW(x, y) | 幂运算,x 的 y 次方 |
SQRT(x) | 平方根 |
三、日期时间函数
函数 | 功能 |
---|---|
NOW() / CURRENT_TIMESTAMP() | 获取当前时间戳 |
CURDATE() | 获取当前日期(yyyy-MM-dd) |
CURTIME() | 获取当前时间(HH:mm:ss) |
DATE_FORMAT(date, format) | 格式化日期时间 |
UNIX_TIMESTAMP() | 获取当前 UNIX 时间戳 |
FROM_UNIXTIME(ts) | 将时间戳转换为日期格式 |
YEAR(date) / MONTH(date) / DAY(date) | 获取年 / 月 / 日 |
DATE_ADD(date, INTERVAL n DAY) | 日期加 n 天 |
DATEDIFF(d1, d2) | 两日期相差天数 |
TIMESTAMPDIFF(unit, d1, d2) | 返回两个日期差值(按单位:SECOND, MINUTE, HOUR, DAY, MONTH, YEAR) |
四、聚合函数(GROUP BY 常用)
函数 | 功能 |
---|---|
COUNT() | 统计数量 |
SUM() | 求和 |
AVG() | 求平均值 |
MAX() | 求最大值 |
MIN() | 求最小值 |
GROUP_CONCAT() | 将多行结果拼接成一行字符串 |
五、条件与流程函数
函数 | 功能 |
---|---|
IF(expr, v1, v2) | 如果 expr 为真返回 v1,否则返回 v2 |
IFNULL(expr1, expr2) | 如果 expr1 为 NULL 返回 expr2 |
NULLIF(expr1, expr2) | 如果 expr1 = expr2 返回 NULL,否则返回 expr1 |
CASE WHEN ... THEN ... END | 多条件判断返回 |
六、加密函数
函数 | 功能 |
---|---|
MD5(str) | 计算字符串的 MD5 值 |
SHA1(str) | 计算字符串的 SHA1 值 |
PASSWORD(str) | 加密字符串(MySQL 内部使用) |
七、其他常用函数
函数 | 功能 |
---|---|
UUID() | 生成一个唯一 UUID |
VERSION() | 查看 MySQL 版本 |
DATABASE() | 获取当前数据库名 |
USER() | 获取当前用户 |
MySQL高阶函数
✅一、窗口函数(OVER())
MySQL 8.0 开始支持:
函数 | 功能 |
---|---|
ROW_NUMBER() OVER() | 为每行分配唯一序号(分组内排序后编号) |
RANK() OVER() | 排名(遇到并列跳号) |
DENSE_RANK() OVER() | 密集排名(并列不跳号) |
NTILE(n) OVER() | 分成 n 组 |
SUM() OVER() | 窗口内累计求和 |
AVG() OVER() | 窗口内平均值 |
LAG(col, offset, default) OVER() | 获取上 n 行数据 |
LEAD(col, offset, default) OVER() | 获取下 n 行数据 |
💡 示例:
sql
复制编辑
SELECT employee_id, score, RANK() OVER(PARTITION BY department_id ORDER BY score DESC) AS dept_rank FROM performance;
✅ 二、JSON 函数
MySQL 原生支持 JSON 类型:
函数 | 功能 |
---|---|
JSON_OBJECT(k, v, ...) | 创建 JSON 对象 |
JSON_ARRAY(v1, v2, ...) | 创建 JSON 数组 |
JSON_EXTRACT(json_doc, path) | 提取 JSON 指定路径数据(别名:-> ) |
JSON_SET(json_doc, path, val) | 更新 JSON 指定路径数据 |
JSON_MERGE_PRESERVE(a, b) | 合并 JSON |
JSON_CONTAINS(json_doc, val) | 判断 JSON 是否包含指定值 |
✅ 三、正则函数
函数 | 功能 |
---|---|
REGEXP_LIKE(str, pattern) | 是否匹配正则(MySQL 8.0+) |
REGEXP_REPLACE(str, pattern, replacement) | 正则替换 |
REGEXP_SUBSTR(str, pattern) | 提取正则匹配子串(8.0+) |
✅ 四、动态 SQL 函数(Prepared Statement)
功能 | 示例 |
---|---|
动态执行 SQL | ``` |
PREPARE stmt FROM 'SELECT * FROM users WHERE id = ?'; | |
SET @id = 1; | |
EXECUTE stmt USING @id; | |
DEALLOCATE PREPARE stmt; |
✅
五、递归CTE函数(8.0+)
| 功能 | 示例 | |------------|----------------------------------------------|
| 递归查询组织架构 | ```WITH RECURSIVE org AS (SELECT id, name, parent_id FROM dept WHERE parent_id IS NULL UNION ALL SELECT d.id, d.name, d.parent_id FROM dept d INNER JOIN org o ON d.parent_id = o.id ) SELECT * FROM org;``` |
✅
六、数学高阶函数
| 函数 | 功能 | |--------------|-------------------------|
| `LOG(base, x)` | 指定底数对数计算 |
| `EXP(x)` | e 的 x 次方 |
| `PI()` | 圆周率 |
| `SIN(x)` / `COS(x)` / `TAN(x)` | 三角函数计算 |
✅
七、其他高级函数
| 函数 | 功能 |
|-----------------------|--------------------------------------|
| `GROUP_CONCAT(DISTINCT col ORDER BY col SEPARATOR ',')` | 聚合去重有序字符串拼接 |
| `ELT(n, str1, str2, str3)` | 返回第 n 个字符串 |
| `FIELD(str, s1, s2, s3)` | 字符串在列表中位置(找不到返回 0) |
| `FIND_IN_SET(str, strlist)` | 在逗号分隔字符串集合中查找字符串的位置(从 1 开始) |
以上是 MySQL 常用“高阶函数”大全(适合复杂查询和高级数据处理场景)。