我只是一个在沙滩上捡贝壳的小男孩,梦想有一天可以发现知识的真理~~~

函数的语法(标准模版)

自定义函数 (user-defined function UDF)就是用一个象ABS() 或 CONCAT()这样的固有(内建)函数一样作用的新函数去扩展MySQL,所以UDF是对MySQL功能的一个扩展

创建和删除自定义函数语法:

创建UDF:

  1.   CREATE [AGGREGATE] FUNCTION function_name(parameter_name type,[parameter_name type,...])
  2.   RETURNS {STRING|INTEGER|REAL}
  3.   runtime_body

简单来说就是:

  CREATE FUNCTION 函数名称(参数列表)

  RETURNS 返回值类型

  函数体

删除UDF:


  DROP FUNCTION function_name

调用自定义函数语法:


  SELECT function_name(parameter_value,...)

举几个例子

例子1
简单的函数
  1. CREATE FUNCTION simpleFun() RETURNS VARCHAR(20)
  2. BEGIN
  3. RETURN "Hello World!";
  4. end;
使用函数
  1. select simpleFun();


说明:

UDF可以实现的功能不止于此,UDF有两个关键点,一个是参数,一个是返回值,UDF可以没有参数,但UDF必须有且只有一个返回值
 

例子2

  1. CREATE TABLE son (
  2. id INT NOT NULL,
  3. name VARCHAR(20),
  4. pay INTEGER
  5. );
  6. INSERT INTO son (id, name, pay) VALUES (1,'bol',20);
  7. INSERT INTO son (id, name, pay) VALUES (2,'davie',2220);
  8. SELECT * FROM son;
  9. DROP FUNCTION IF EXISTS deleteById;
  10. CREATE FUNCTION deleteById(uid SMALLINT UNSIGNED)
  11. RETURNS VARCHAR(20)
  12. BEGIN
  13. DELETE FROM son WHERE id = uid;
  14. RETURN (SELECT COUNT(id) FROM son);
  15. END
  16. select deleteById(2);
这里我们是单步执行的,所以,我们可以不定义DELIMITER,DELIMITER的意思是定义默认的结束符号!
DELIMITER // 意思是修改默认的结束符";"为"//",以后的SQL语句都要以"//"作为结尾

在函数体重我们可以使用更为复杂的语法,比如复合结构/流程控制/任何SQL语句/定义变量等等

这个函数把'2009-06-23 00:00:00'转换为一个特定的字符串
  1. DELIMITER $$
  2. DROP FUNCTION IF EXISTS `test`;
  3. CREATE FUNCTION `test`(gdate datetime) RETURNS varchar(255)
  4. BEGIN
  5. DECLARE x VARCHAR(255) DEFAULT '';
  6. SET x= date_format(gdate,'%Y%m%d%h%i%s');
  7. RETURN x;
  8. END $$
  9. DELIMITER ;
  10. SELECT test('2009-06-23 00:00:00')


这个函数截取字符串
  1. DELIMITER $$
  2. DROP FUNCTION IF EXISTS cutString ;
  3. CREATE FUNCTION cutString(s VARCHAR(255),n INT) RETURNS varchar(255)
  4. BEGIN
  5. IF(ISNULL(s)) THEN RETURN '';
  6. ELSEIF CHAR_LENGTH(s)<n THEN 
  7. RETURN s;
  8. ELSEIF CHAR_LENGTH(S)=n THEN 
  9. RETURN '相等';
  10. ELSE 
  11. RETURN CONCAT(LEFT(s,n),'...');
  12. END IF;
  13. END $$
  14. DELIMITER ;
  15. SELECT cutString('323432234',4);



函数的模版

posted @ 2017-06-17 18:38  瓜不甜  阅读(206)  评论(0编辑  收藏  举报

全栈开发工程师 - 一只菜鸟的成长之路

这是一位软件开发工程师的个人站,内容主要是网站开发方面的技术文章,大部分来自学习或工作,部分来源于网络,希望对大家有所帮助。

联系我:2351180282@qq.com