MySQL函数大全:从核心内置函数到高级UDF自定义完全指南

时间:2025-09-15 18:19

MySQL 函数是一个极其强大且丰富的功能集,它允许你在 SQL 语句中直接对数据进行计算、转换和聚合操作,从而将大部分数据处理逻辑在数据库层面完成,减少应用程序的负担。

MySQL 函数主要分为两大类:内置函数 和 用户自定义函数 (UDF)。

一、 内置函数 (Built-in Functions)

MySQL 提供了上百个内置函数,涵盖数据处理各个方面。以下是最常用和核心的分类与示例。

  1. 字符串函数 (String Functions)

用于处理文本数据。

函数

描述

示例

​​CONCAT(str1, str2, ...)​​

拼接字符串

​​SELECT CONCAT('Hello', ' ', 'World'); -> 'Hello World'​​

​​SUBSTRING(str, pos, len)​​

从字符串中提取子串

​​SELECT SUBSTRING('MySQL', 3, 2); -> 'SQ'​​

​​REPLACE(str, from_str, to_str)​​

替换字符串中的字符

​​SELECT REPLACE('www.mysql.com', 'com', 'net'); -> 'www.mysql.net'​​

​​LENGTH(str)​​

返回字符串的字节长度

​​SELECT LENGTH('中国'); -> 6 (UTF8中文字符占3字节)​​

​​CHAR_LENGTH(str)​​

返回字符串的字符长度

​​SELECT CHAR_LENGTH('中国'); -> 2​​

​​UPPER(str) / LOWER(str)​​

转换为大写/小写

​​SELECT UPPER('mysql'); -> 'MYSQL'​​

​​TRIM([{BOTH|LEADING|TRAILING} [remstr] FROM] str)​​

去除首尾空格或指定字符

​​SELECT TRIM(' MySQL '); -> 'MySQL'​​

​​LEFT(str, len) / RIGHT(str, len)​​

返回字符串左/右起指定长度的字符

​​SELECT LEFT('MySQL', 2); -> 'My'​​

  1. 数值函数 (Numeric Functions)

用于数学计算。

函数

描述

示例

​​ROUND(X, D)​​

对 X 进行四舍五入,保留 D 位小数

​​SELECT ROUND(3.14159, 2); -> 3.14​​

​​CEILING(X) / FLOOR(X)​​

向上/向下取整

​​SELECT CEILING(3.14); -> 4​​

​​ABS(X)​​

返回绝对值

​​SELECT ABS(-10); -> 10​​

​​RAND()​​

返回一个 0~1 之间的随机浮点数

​​SELECT RAND();​​

​​MOD(N, M)​​

返回 N 除以 M 的余数(取模)

​​SELECT MOD(10, 3); -> 1​​

​​POW(X, Y) / POWER(X, Y)​​

返回 X 的 Y 次方

​​SELECT POW(2, 3); -> 8​​

  1. 日期和时间函数 (Date and Time Functions)

用于处理日期和时间。

函数

描述

示例

​​NOW()​​​ / ​​CURDATE()​​​ / ​​CURTIME()​​

返回当前日期时间/日期/时间

​​SELECT NOW(); -> '2023-10-27 15:30:45'​​

​​DATE(date)​​​ / ​​TIME(datetime)​​

提取日期/时间部分

​​SELECT DATE(NOW()); -> '2023-10-27'​​

​​YEAR(date)​​​ / ​​MONTH(date)​​​ / ​​DAY(date)​​

提取年/月/日

​​SELECT YEAR('2023-10-27'); -> 2023​​

​​DATE_ADD(date, INTERVAL expr unit)​​

日期加法

​​SELECT DATE_ADD(NOW(), INTERVAL 1 DAY);​​

​​DATE_SUB(date, INTERVAL expr unit)​​

日期减法

​​SELECT DATE_SUB(NOW(), INTERVAL 1 MONTH);​​

​​DATEDIFF(expr1, expr2)​​

返回两个日期相差的天数

​​SELECT DATEDIFF('2023-10-28', '2023-10-27'); -> 1​​

​​DATE_FORMAT(date, format)​​

格式化日期

​​SELECT DATE_FORMAT(NOW(), '%Y年%m月%d日'); -> '2023年10月27日'​​

  1. 聚合函数 (Aggregate Functions)

用于对一组值执行计算并返回单个汇总值。通常与 ​​GROUP BY​​ 子句一起使用。

函数

描述

示例

​​COUNT()​​

统计行数

​​SELECT COUNT(*) FROM users;​​

​​SUM()​​

求和

​​SELECT SUM(salary) FROM employees;​​

​​AVG()​​

求平均值

​​SELECT AVG(score) FROM exams;​​

​​MAX()​​​ / ​​MIN()​​

求最大值/最小值

​​SELECT MAX(price) FROM products;​​

​​GROUP_CONCAT()​​

将分组后的多行值连接成一个字符串

​​SELECT GROUP_CONCAT(name) FROM students; -> 'Alice,Bob,Charlie'​​

  1. 控制流函数 (Control Flow Functions)

用于实现条件逻辑,类似于编程语言中的 ​​if-else​​ 语句。

函数

描述

示例

​​IF(expr, v1, v2)​​

如果 expr 为真,返回 v1,否则返回 v2

​​SELECT IF(score >= 60, '及格', '不及格') FROM scores;​​

​​CASE​​

复杂的条件分支

​​SELECT CASE WHEN score >= 90 THEN '优' WHEN score >= 80 THEN '良' ELSE '中' END AS grade FROM scores;​​

​​IFNULL(expr1, expr2)​​

如果 expr1 不为 NULL,返回 expr1,否则返回 expr2

​​SELECT IFNULL(nickname, username) FROM users;​​

​​COALESCE(expr1, expr2, ...)​​

返回参数列表中第一个非 NULL 的值

​​SELECT COALESCE(address1, address2, '未知地址') FROM contacts;​​

二、 用户自定义函数 (UDF - User-Defined Functions)

如果内置函数无法满足你的特殊需求,你可以用 C/C++ 或 SQL 语句编写自己的函数。

  1. 用 SQL 语句定义函数 (CREATE FUNCTION) 使用 ​​CREATE FUNCTION​​ 语句可以创建存储函数。这些函数可以在 SQL 语句中像内置函数一样调用。
DELIMITER // -- 临时修改分隔符,避免函数体中的分号被误认

CREATE FUNCTION CalculateTax(salary DECIMAL(10,2))
RETURNS DECIMAL(10,2)
DETERMINISTIC -- 表示对于相同的输入,总是返回相同的结果
BEGIN
    DECLARE tax DECIMAL(10,2);
    SET tax = salary * 0.1; -- 假设税率是10%
    RETURN tax;
END //

DELIMITER ; -- 将分隔符改回分号

-- 使用自定义函数
SELECT name, salary, CalculateTax(salary) AS tax FROM employees;
  1. 用 C/C++ 编写 UDF (编译成动态库) 这种方式性能极高,但也更复杂。你需要编写 C/C++ 代码,编译成 ​​.so​​​ (Linux) 或 ​​.dll​​​ (Windows) 文件,然后用 ​​CREATE FUNCTION​​ 语句将其加载到 MySQL 中。这属于高级用法。

三、 最佳实践与注意事项

  1. 不要在 WHERE 子句的列上使用函数 这会导致数据库无法使用该列上的索引,从而引发全表扫描,性能极差。
  • 错误示例: ​​SELECT * FROM orders WHERE YEAR(create_time) = 2023;​​
  • 正确示例: ​​SELECT * FROM orders WHERE create_time >= '2023-01-01' AND create_time < '2024-01-01';​​
  1. 理解函数的确定性
  • 确定性函数 (DETERMINISTIC):对于相同的输入参数,总是返回相同的结果(如 ​​POW(), LENGTH()​​)。
  • 非确定性函数 (NOT DETERMINISTIC):对于相同的输入参数,可能返回不同的结果(如 ​​NOW(), RAND(), UUID()​​)。 在创建自定义函数时需要正确声明,这会影响MySQL的优化和复制。
  1. 注意字符集和排序规则 字符串函数的结果可能会受到系统字符集和排序规则的影响。
  2. 聚合函数与 GROUP BY 当 ​​SELECT​​ 列表中包含聚合函数和非聚合的列时,所有非聚合的列都必须包含在 ​​GROUP BY​​ 子句中,否则结果是不确定的。

另外搭配便捷的MYSQL备份工具,可定时备份、异地备份,MYSQL导出导入。可本地连接LINUX里的MYSQL,简单便捷。可以大大地提高工作效率喔。

内网穿透工具自托管 vs 云端中转:穿云箭和花生壳优缺点深度分析
内网ip远程控制,借助内网IP实现远程控制的完整指南
远程访问内网IP:打破网络边界的连接艺术
理解Windows系统中的NAT转发功能
内网穿透工具自托管 vs 云端中转:穿云箭和花生壳优缺点分析
手把手配置SSR端口转发:UDP协议支持与高级设置详解
什么是nat123?nat123的核心功能
nat123端口映射:轻松实现外网访问内网
nat123下载:轻松获取内网穿透工具
nat123官网:老牌内网穿透工具