内容纲要
标签:MySQL, SQL, 数据库, 函数, 教程
引言
MySQL 函数是 SQL 查询中极为重要的工具,它们能够对数据进行计算、转换、格式化和聚合处理,让查询结果更灵活、更高效。在实际开发中,MySQL 函数被广泛用于数据清洗、业务计算、报表生成、权限校验等场景。掌握这些函数,可以显著提升数据库操作能力。
本文将系统整理 MySQL 常用函数,按类别进行详细介绍,并提供可直接运行的 SQL 示例,帮助你在实际项目中快速上手。
1. 数学函数
数学函数用于数值运算,适合处理价格、数量、统计等数值型数据。
常用函数列表
函数 | 作用 |
---|---|
ABS(x) |
返回 x 的绝对值 |
CEIL(x) / CEILING(x) |
向上取整 |
FLOOR(x) |
向下取整 |
ROUND(x, d) |
四舍五入到 d 位小数 |
TRUNCATE(x, d) |
截断到 d 位小数(不四舍五入) |
MOD(x, y) |
返回 x 除以 y 的余数 |
POWER(x, y) |
返回 x 的 y 次方 |
RAND() |
返回 0\~1 之间的随机数 |
SQL 示例
-- 建表
CREATE TABLE products (
id INT PRIMARY KEY AUTO_INCREMENT,
price DECIMAL(10,2)
);
-- 插入数据
INSERT INTO products (price) VALUES
(10.25), (15.75), (-8.40), (99.99);
-- 查询示例
SELECT
price,
ABS(price) AS abs_val,
CEIL(price) AS ceil_val,
FLOOR(price) AS floor_val,
ROUND(price, 1) AS round_val,
TRUNCATE(price, 1) AS trunc_val,
MOD(price, 7) AS mod_val,
POWER(price, 2) AS power_val,
RAND() AS random_val
FROM products;
输出示例(部分):
price abs_val ceil_val floor_val round_val trunc_val mod_val power_val random_val
10.25 10.25 11 10 10.3 10.2 3.25 105.0625 0.4352
注意事项:
ROUND()
与TRUNCATE()
区别:一个四舍五入,一个直接截断。RAND()
可配合RAND(seed)
固定随机结果。
2. 字符串函数
字符串函数适用于文本处理、数据清洗、格式化等场景。
常用函数列表
函数 | 作用 |
---|---|
CONCAT(s1, s2, ...) |
拼接字符串 |
CONCAT_WS(sep, s1, s2, ...) |
用分隔符拼接字符串 |
LENGTH(s) |
字节长度(UTF-8 中文为 3 字节) |
CHAR_LENGTH(s) |
字符长度 |
UPPER(s) / LOWER(s) |
转大写 / 小写 |
LEFT(s, n) / RIGHT(s, n) |
取左 / 右 n 个字符 |
SUBSTRING(s, pos, len) |
从指定位置取子串 |
REPLACE(s, from, to) |
替换字符串 |
SQL 示例
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50)
);
INSERT INTO users (name) VALUES
('Alice'), ('Bob'), ('张三');
SELECT
name,
CONCAT('Hello ', name) AS greet,
LENGTH(name) AS byte_len,
CHAR_LENGTH(name) AS char_len,
UPPER(name) AS upper_name,
LEFT(name, 2) AS left_part,
REPLACE(name, 'o', '0') AS replaced
FROM users;
注意事项:
- UTF-8 下
LENGTH()
与CHAR_LENGTH()
对中文结果不同。 CONCAT()
遇到NULL
会返回NULL
,可用IFNULL()
处理。
3. 日期与时间函数
常用于日志、报表、统计等场景。
常用函数列表
函数 | 作用 |
---|---|
NOW() |
当前日期时间 |
CURDATE() |
当前日期 |
CURTIME() |
当前时间 |
DATE_FORMAT(date, fmt) |
格式化日期 |
DATEDIFF(d1, d2) |
天数差 |
TIMESTAMPDIFF(unit, d1, d2) |
按单位计算差值 |
ADDDATE(date, n) |
加 n 天 |
SUBDATE(date, n) |
减 n 天 |
SQL 示例
SELECT
NOW() AS current_datetime,
CURDATE() AS current_date,
DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i') AS formatted,
DATEDIFF('2025-12-31', CURDATE()) AS days_left,
TIMESTAMPDIFF(HOUR, NOW(), '2025-12-31 23:59:59') AS hours_left,
ADDDATE(CURDATE(), 7) AS plus_week
;
注意事项:
- 时间差单位:
SECOND
,MINUTE
,HOUR
,DAY
,MONTH
,YEAR
。 - 日期格式符号
%Y
%m
%d
%H
%i
%s
等。
4. 聚合函数
用于分组统计和汇总。
函数 | 作用 |
---|---|
COUNT(expr) |
统计行数 |
SUM(expr) |
求和 |
AVG(expr) |
平均值 |
MIN(expr) |
最小值 |
MAX(expr) |
最大值 |
GROUP_CONCAT(expr) |
按分组拼接值 |
CREATE TABLE orders (
id INT PRIMARY KEY AUTO_INCREMENT,
amount DECIMAL(10,2),
customer_id INT
);
INSERT INTO orders (amount, customer_id) VALUES
(100.5, 1), (200, 1), (50, 2);
SELECT
customer_id,
COUNT(*) AS order_count,
SUM(amount) AS total_amount,
AVG(amount) AS avg_amount,
MIN(amount) AS min_amount,
MAX(amount) AS max_amount,
GROUP_CONCAT(amount) AS all_amounts
FROM orders
GROUP BY customer_id;
5. 条件与流程控制函数
函数 | 作用 |
---|---|
IF(expr, t, f) |
条件判断 |
IFNULL(expr, alt) |
空值替换 |
NULLIF(a, b) |
相等返回 NULL |
CASE WHEN ... THEN ... END |
多条件判断 |
COALESCE(a, b, ...) |
返回第一个非空值 |
GREATEST(a, b, ...) |
最大值 |
LEAST(a, b, ...) |
最小值 |
SELECT
amount,
IF(amount > 100, 'High', 'Low') AS level,
IFNULL(NULL, 'default') AS null_test,
CASE
WHEN amount >= 200 THEN 'VIP'
WHEN amount >= 100 THEN 'Normal'
ELSE 'Low'
END AS customer_type
FROM orders;
6. 系统信息函数
函数 | 作用 |
---|---|
VERSION() |
MySQL 版本 |
DATABASE() |
当前数据库 |
USER() |
当前用户 |
CHARSET(str) |
字符集 |
COLLATION(str) |
校对规则 |
LAST_INSERT_ID() |
上次插入的自增 ID |
SELECT VERSION(), DATABASE(), USER();
7. 加密与哈希函数
函数 | 作用 |
---|---|
MD5(str) |
MD5 哈希 |
SHA1(str) |
SHA-1 哈希 |
SHA2(str, len) |
SHA-2 哈希 |
PASSWORD(str) |
MySQL 密码(不建议业务使用) |
AES_ENCRYPT(str, key) |
AES 加密 |
AES_DECRYPT(str, key) |
AES 解密 |
SELECT
MD5('hello') AS md5_val,
SHA1('hello') AS sha1_val,
SHA2('hello', 256) AS sha256_val;
8. 其他实用函数
函数 | 作用 |
---|---|
UUID() |
生成全局唯一标识 |
INET_ATON(ip) |
IP 转整数 |
INET_NTOA(int) |
整数转 IP |
FORMAT(x, d) |
千分位格式化 |
BENCHMARK(count, expr) |
性能测试 |
SLEEP(n) |
延迟执行 |
总结
MySQL 内置函数功能丰富,能够极大提升数据处理的效率。学习建议:
- 按类别掌握核心函数,避免盲目记忆。
- 多结合实际业务场景,形成肌肉记忆。
- 关注 MySQL 版本差异(特别是加密函数和系统信息函数)。
- 善用
CASE
、IF
等控制函数提升 SQL 灵活性。
参考资料:
我这篇文章可以直接发布到你的 WordPress 博客,并且所有 SQL 示例都能直接在 MySQL 8.x 中运行。
如果你需要的话,我还能帮你把这些函数的参数、返回值、示例效果做成一个全功能的函数速查表,方便离线查询和打印。这样你随时都能查找用法,不用每次翻文档。