MySQL 提供了丰富的内置函数,主要分为以下几大类:
一、字符串函数
CONCAT()
| 拼接字符串 | SELECT CONCAT('Hello', ' World');
→ Hello World
|
SUBSTRING()
| 截取字符串 | SELECT SUBSTRING('abcdef', 2, 3);
→ bcd
|
UPPER()
/ LOWER()
| 转换大小写 | SELECT UPPER('hello');
→ HELLO
|
TRIM()
| 去除空格 | SELECT TRIM(' hello ');
→ hello
|
REPLACE()
| 替换字符串 | SELECT REPLACE('hello world', 'world', 'MySQL');
→ hello MySQL
|
LEFT()
/ RIGHT()
| 获取左/右子串 | SELECT LEFT('abcdef', 3);
→ abc
|
LENGTH()
| 字符串长度 | SELECT LENGTH('Hello');
→ 5
|
二、数值函数
ABS()
| 绝对值 | SELECT ABS(-5);
→ 5
|
CEIL()
/ FLOOR()
| 向上/向下取整 | SELECT CEIL(4.3);
→ 5
|
ROUND()
| 四舍五入 | SELECT ROUND(3.14159, 2);
→ 3.14
|
RAND()
| 生成随机数 | SELECT RAND();
→ 0.84375...
|
MOD()
| 取模运算 | SELECT MOD(10, 3);
→ 1
|
三、日期和时间函数
NOW()
| 当前日期时间 | SELECT NOW();
→ 2025-03-11 15:00:00
|
CURDATE()
/ CURTIME()
| 当前日期 / 时间 | SELECT CURDATE();
→ 2025-03-11
|
YEAR()
/ MONTH()
/ DAY()
| 提取年、月、日 | SELECT YEAR(NOW());
→ 2025
|
DATE_ADD()
/ DATE_SUB()
| 日期加减 | SELECT DATE_ADD(NOW(), INTERVAL 7 DAY);
|
DATEDIFF()
| 计算两个日期差 | SELECT DATEDIFF('2025-03-11', '2025-03-01');
→ 10
|
STR_TO_DATE()
| 字符串转日期 | SELECT STR_TO_DATE('11/03/2025', '%d/%m/%Y');
|
DATE_FORMAT()
| 格式化日期 | SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s');
|
四、聚合函数
COUNT()
| 计数 | SELECT COUNT(*) FROM users;
|
SUM()
| 求和 | SELECT SUM(price) FROM orders;
|
AVG()
| 平均值 | SELECT AVG(score) FROM students;
|
MAX()
/ MIN()
| 最大 / 最小值 | SELECT MAX(salary) FROM employees;
|
五、条件判断函数
IF()
| 条件判断 | SELECT IF(1 > 0, 'YES', 'NO');
→ YES
|
IFNULL()
| 判断 NULL | SELECT IFNULL(NULL, 'default');
→ default
|
CASE
| 多条件判断 | |
SELECT CASE
WHEN score >= 90 THEN '优秀'
WHEN score >= 60 THEN '及格'
ELSE '不及格'
END AS result
FROM students;
六、加密函数
MD5()
| MD5 加密 | SELECT MD5('password');
|
SHA1()
| SHA1 加密 | SELECT SHA1('password');
|
七、其他实用函数
COALESCE()
| 返回第一个非 NULL 值 | SELECT COALESCE(NULL, NULL, 'Hello');
|
UUID()
| 生成唯一标识符 | SELECT UUID();
|
八、窗口函数 (MySQL 8.0+)
ROW_NUMBER()
| 行号 | SELECT ROW_NUMBER() OVER(PARTITION BY dept ORDER BY salary DESC);
|
RANK()
| 排名 | SELECT RANK() OVER(ORDER BY salary DESC);
|
DENSE_RANK()
| 密集排名 | SELECT DENSE_RANK() OVER(ORDER BY salary DESC);
|
九、JSON 相关函数 (MySQL 5.7+)
JSON_EXTRACT()
| 提取 JSON 数据 | SELECT JSON_EXTRACT('{"name": "Tom"}', '$.name');
|
JSON_OBJECT()
| 创建 JSON 对象 | SELECT JSON_OBJECT('id', 1, 'name', 'Alice');
|
十、错误处理函数
ERROR()
| 错误提示 | SELECT ERROR(1045, 'Access denied');
|
常见组合示例
SELECT
UPPER(name) AS upper_name,
ROUND(salary, 2) AS rounded_salary,
DATE_FORMAT(hire_date, '%Y-%m-%d') AS formatted_date
FROM employees
WHERE YEAR(hire_date) > 2020
ORDER BY salary DESC;