自定义函数 (user-defined function UDF)就是用一个象ABS() 或 CONCAT()这样的固有(内建)函数一样作用的新函数去扩展MySQL,所以UDF是对MySQL功能的一个扩展
创建和删除自定义函数语法:
创建UDF:
CREATE [AGGREGATE] FUNCTION function_name(parameter_name type,[parameter_name type,...])RETURNS {STRING|INTEGER|REAL}runtime_body
简单来说就是:
CREATE FUNCTION 函数名称(参数列表)
RETURNS 返回值类型
函数体
删除UDF:
DROP FUNCTION function_name
调用自定义函数语法:
SELECT function_name(parameter_value,...)
举几个例子
例子1
简单的函数
CREATE FUNCTION simpleFun() RETURNS VARCHAR(20)BEGINRETURN "Hello World!";end;
使用函数
select simpleFun();
说明:
UDF可以实现的功能不止于此,UDF有两个关键点,一个是参数,一个是返回值,UDF可以没有参数,但UDF必须有且只有一个返回值
例子2
CREATE TABLE son (id INT NOT NULL,name VARCHAR(20),pay INTEGER);INSERT INTO son (id, name, pay) VALUES (1,'bol',20);INSERT INTO son (id, name, pay) VALUES (2,'davie',2220);SELECT * FROM son;DROP FUNCTION IF EXISTS deleteById;CREATE FUNCTION deleteById(uid SMALLINT UNSIGNED)RETURNS VARCHAR(20)BEGINDELETE FROM son WHERE id = uid;RETURN (SELECT COUNT(id) FROM son);ENDselect deleteById(2);
这里我们是单步执行的,所以,我们可以不定义DELIMITER,DELIMITER的意思是定义默认的结束符号!
DELIMITER // 意思是修改默认的结束符";"为"//",以后的SQL语句都要以"//"作为结尾
在函数体重我们可以使用更为复杂的语法,比如复合结构/流程控制/任何SQL语句/定义变量等等
这个函数把'2009-06-23 00:00:00'转换为一个特定的字符串
DELIMITER $$DROP FUNCTION IF EXISTS `test`;CREATE FUNCTION `test`(gdate datetime) RETURNS varchar(255)BEGINDECLARE x VARCHAR(255) DEFAULT '';SET x= date_format(gdate,'%Y%m%d%h%i%s');RETURN x;END $$DELIMITER ;SELECT test('2009-06-23 00:00:00')
这个函数截取字符串
DELIMITER $$DROP FUNCTION IF EXISTS cutString ;CREATE FUNCTION cutString(s VARCHAR(255),n INT) RETURNS varchar(255)BEGINIF(ISNULL(s)) THEN RETURN '';ELSEIFCHAR_LENGTH(s)<n THEN- RETURN s;
ELSEIFCHAR_LENGTH(S)=n THEN- RETURN '相等';
ELSERETURN CONCAT(LEFT(s,n),'...');END IF;END $$DELIMITER ;SELECT cutString('323432234',4);