MySQL 函数是一个极其强大且丰富的功能集,它允许你在 SQL 语句中直接对数据进行计算、转换和聚合操作,从而将大部分数据处理逻辑在数据库层面完成,减少应用程序的负担。
MySQL 函数主要分为两大类:内置函数 和 用户自定义函数 (UDF)。
一、 内置函数 (Built-in Functions)
MySQL 提供了上百个内置函数,涵盖数据处理各个方面。以下是最常用和核心的分类与示例。
用于处理文本数据。
函数 |
描述 |
示例 |
|
拼接字符串 |
|
|
从字符串中提取子串 |
|
|
替换字符串中的字符 |
|
|
返回字符串的字节长度 |
|
|
返回字符串的字符长度 |
|
|
转换为大写/小写 |
|
|
去除首尾空格或指定字符 |
|
|
返回字符串左/右起指定长度的字符 |
|
用于数学计算。
函数 |
描述 |
示例 |
|
对 X 进行四舍五入,保留 D 位小数 |
|
|
向上/向下取整 |
|
|
返回绝对值 |
|
|
返回一个 0~1 之间的随机浮点数 |
|
|
返回 N 除以 M 的余数(取模) |
|
|
返回 X 的 Y 次方 |
|
用于处理日期和时间。
函数 |
描述 |
示例 |
|
返回当前日期时间/日期/时间 |
|
|
提取日期/时间部分 |
|
|
提取年/月/日 |
|
|
日期加法 |
|
|
日期减法 |
|
|
返回两个日期相差的天数 |
|
|
格式化日期 |
|
用于对一组值执行计算并返回单个汇总值。通常与 GROUP BY
子句一起使用。
函数 |
描述 |
示例 |
|
统计行数 |
|
|
求和 |
|
|
求平均值 |
|
|
求最大值/最小值 |
|
|
将分组后的多行值连接成一个字符串 |
|
用于实现条件逻辑,类似于编程语言中的 if-else
语句。
函数 |
描述 |
示例 |
|
如果 expr 为真,返回 v1,否则返回 v2 |
|
|
复杂的条件分支 |
|
|
如果 expr1 不为 NULL,返回 expr1,否则返回 expr2 |
|
|
返回参数列表中第一个非 NULL 的值 |
|
二、 用户自定义函数 (UDF - User-Defined Functions)
如果内置函数无法满足你的特殊需求,你可以用 C/C++ 或 SQL 语句编写自己的函数。
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;
.so
(Linux) 或 .dll
(Windows) 文件,然后用 CREATE FUNCTION
语句将其加载到 MySQL 中。这属于高级用法。三、 最佳实践与注意事项
SELECT * FROM orders WHERE YEAR(create_time) = 2023;
SELECT * FROM orders WHERE create_time >= '2023-01-01' AND create_time < '2024-01-01';
POW(), LENGTH()
)。NOW(), RAND(), UUID()
)。 在创建自定义函数时需要正确声明,这会影响MySQL的优化和复制。SELECT
列表中包含聚合函数和非聚合的列时,所有非聚合的列都必须包含在 GROUP BY
子句中,否则结果是不确定的。另外搭配便捷的MYSQL备份工具,可定时备份、异地备份,MYSQL导出导入。可本地连接LINUX里的MYSQL,简单便捷。可以大大地提高工作效率喔。