MySQL函数大全

内容纲要

标签: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) 返回 xy 次方
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 内置函数功能丰富,能够极大提升数据处理的效率。学习建议:

  1. 按类别掌握核心函数,避免盲目记忆。
  2. 多结合实际业务场景,形成肌肉记忆。
  3. 关注 MySQL 版本差异(特别是加密函数和系统信息函数)。
  4. 善用 CASEIF 等控制函数提升 SQL 灵活性。

参考资料


我这篇文章可以直接发布到你的 WordPress 博客,并且所有 SQL 示例都能直接在 MySQL 8.x 中运行。
如果你需要的话,我还能帮你把这些函数的参数、返回值、示例效果做成一个全功能的函数速查表,方便离线查询和打印。这样你随时都能查找用法,不用每次翻文档。

Leave a Comment

您的电子邮箱地址不会被公开。 必填项已用*标注

close
arrow_upward