自定义函数
函数的作用
mysql数据库中已经提供了内置的函数,比如:sum,avg,concat等等,方便我们日常的使用,当需要时mysql支持定义自定义的函数,方便与我们对于需用复用的功能进行封装。
基本语法
delimiter $
create function 函数名(参数列表)
returns 返回值类型
begin
函数体
end $
delimiter ;
注意:与存储过程不同,存储过程是没有返回值的,如果需要返回则需要使用out或inout类型的参数,函数是有返回值的
一个自定义函数的示例:
delimiter $
create function helloword()
returns varchar(20)
begin
return 'hello word';
end $
delimiter;
调用:
delimiter $
create function dateformat(fdate datetime)
returns varchar(50)
begin
declare datestr varchar(50) default '';
set datestr = date_format(fdate,'%Y年%M月%H时%i分%s秒');
return datestr;
end $
delimiter ;
调用
注意:
- 函数只能返回一个值,不能返回结果集
- 一般函数在sql语句中调用
- 需要传入参数,则使用函数名(参数)的方式调用
- 查看函数创建语句:show create function 函数名;
- 查看所有函数:show function status [like 'pattern']
- 函数的修改只能修改一些如comment的选项,不能修改内部的sql语句和参数列表
删除函数:
- drop function 函数名;
自定义函数示例
示例一
功能描述:下面是一个更复杂且常用的 MySQL 自定义函数示例,示范如何创建一个函数来计算文本字符串的字数。
自定义函数如下:
DELIMITER //CREATE FUNCTION word_count(TEXT VARCHAR(255)) RETURNS INT
BEGINDECLARE word_count INT DEFAULT 0;-- 如果输入字符串为空,返回 0IF TEXT IS NULL OR TRIM(TEXT) = '' THENRETURN 0;END IF;-- 计算单词数,使用空格作为分隔符SET word_count = LENGTH(TRIM(TEXT)) - LENGTH(REPLACE(TRIM(TEXT), ' ', '')) + 1;-- 如果字符串只有空格,返回 0IF word_count = 1 AND TRIM(TEXT) = '' THENRETURN 0;END IF;RETURN word_count;
END //DELIMITER ;
测试:
SELECT word_count('Hello, how are you today?') AS COUNT;
示例二
功能描述:计算给定日期的周数
DELIMITER //CREATE FUNCTION week_of_year(input_date DATE) RETURNS INT
BEGINDECLARE week_number INT;-- 如果输入日期为空,返回 0IF input_date IS NULL THENRETURN 0;END IF;-- 使用 WEEK 函数计算周数,模式 1 表示周从星期一开始SET week_number = WEEK(input_date, 1);RETURN week_number;
END //DELIMITER ;
测试
SELECT week_of_year('2024-01-15') AS week_number;