MySQL 函数
MySQL 函数
MySQL 函数是预先定义的代码块,用于实现特定的数据处理逻辑(如计算、字符串操作、日期转换等),可直接在 SQL 语句中调用,简化复杂查询。按功能分为内置函数和自定义函数。
内置函数(常用分类)
| 函数类别 | 常用函数示例 | 功能说明 |
|---|---|---|
| 字符串函数 | CONCAT(str1, str2)、SUBSTRING(str, start, len)、LENGTH(str) |
拼接字符串、截取子串、获取字符串长度(字节数)。 |
| 数值函数 | SUM(col)、AVG(col)、MAX(col)、MIN(col)、ROUND(num, dec) |
求和、求平均、求最大/最小值、四舍五入(保留 dec 位小数)。 |
| 日期函数 | NOW()、DATE_FORMAT(date, format)、DATEDIFF(date1, date2) |
获取当前时间、格式化日期(如 %Y-%m-%d)、计算两个日期相差天数。 |
| 逻辑函数 | IF(condition, val1, val2)、CASE WHEN condition THEN val1 ELSE val2 END |
条件判断(IF:满足条件返回 val1,否则 val2;CASE:多条件分支)。 |
| 聚合函数 | COUNT(col)、GROUP_CONCAT(col) |
统计行数(注意 COUNT(*) 统计所有行,COUNT(col) 忽略 NULL)、拼接分组内字段。 |
自定义函数(UDF)
当内置函数无法满足需求时,可自定义函数,用于实现特定业务逻辑(如计算身份证校验位、转换编码等)。
语法格式
-- 创建自定义函数
DELIMITER // -- 临时修改语句结束符(默认是;,避免函数内;被误识别)
CREATE FUNCTION 函数名(参数名 参数类型)
RETURNS 返回类型 -- 函数必须有返回值
DETERMINISTIC -- 相同输入返回相同结果(可选,优化性能)
BEGIN
-- 函数体(变量定义、逻辑处理)
DECLARE 变量名 变量类型 DEFAULT 默认值; -- 定义局部变量
-- 业务逻辑(如计算两数之和)
SET 变量名 = 参数1 + 参数2;
RETURN 变量名; -- 返回结果
END //
DELIMITER ; -- 恢复语句结束符为;
-- 调用自定义函数
SELECT 函数名(参数值1, 参数值2);
-- 删除自定义函数
DROP FUNCTION IF EXISTS 函数名;
示例:自定义函数计算两数之和
-- 创建函数 add_two_num
DELIMITER //
CREATE FUNCTION add_two_num(a INT, b INT)
RETURNS INT
DETERMINISTIC
BEGIN
DECLARE sum INT DEFAULT 0;
SET sum = a + b;
RETURN sum;
END //
DELIMITER ;
-- 调用函数
SELECT add_two_num(3, 5); -- 结果:8
-- 删除函数
DROP FUNCTION IF EXISTS add_two_num;
函数与存储过程的区别
| 特性 | 函数(Function) | 存储过程(Procedure) |
|---|---|---|
| 返回值 | 必须有且仅有一个返回值(可用于 SELECT 语句中,如 SELECT func(1))。 |
可以没有返回值,也可以有多个返回值(通过 OUT/INOUT 参数),不能用于 SELECT。 |
| 调用场景 | 主要用于数据计算、转换,嵌入在 SELECT/UPDATE 等语句中。 | 主要用于执行批量操作(如批量插入、删除),通过 CALL 单独调用。 |
| 事务支持 | 一般不包含事务逻辑(若包含,可能影响函数的“确定性”)。 | 支持完整的事务操作(START TRANSACTION/COMMIT/ROLLBACK)。 |

浙公网安备 33010602011771号