自定義函數
函數的作用
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;