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,简单便捷。可以大大地提高工作效率喔。

mysql删除重复数据只保留一条,选择适合你表结构的方法
闪客派对!FlashFXP 3.0 快乐通关秘籍
打造高信息密度WordPress主题:复刻知乎问答体验
Oracle数据库exp备份:幽默指南与教程
备份软件,让数据管理变得轻松愉快
逆袭学习法:如何启动你的垫底辣妹FTP
键盘一摔,老子要把“最近使用的文件”全扔进黑洞!
WordPress图片本地化存储策略
MySQL迁移至MSSQL的实践指南
北京石油化学院备份机房建设与发展