MySQL 自定义函数

MySQL 自定义函数 语法:mysql

CREATE FUNCTION sp_name ([func_parameter[,...]]) sql

    RETURNS type ide

    [characteristic ...] routine_body 函数

func_parameter: spa

    param_name type 字符串

type: string

    Any valid MySQL data type it

characteristic: io

    LANGUAGE SQL function

  | [NOT] DETERMINISTIC

  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }

  | SQL SECURITY { DEFINER | INVOKER }

  | COMMENT 'string'

routine_body:

    Valid SQL procedure statement or statements

 

MySQL 系统函数

· INSERT(str,pos,len,newstr

返回字符串 str其子字符串起始于 pos 位置和长期被字符串 newstr取代的len 字符。  若是pos 超过字符串长度,则返回值为原始字符串。 假如len的长度大于其它字符串的长度,则从位置pos开始替换。若任何一个参数为null,则返回值为NULL。 

mysql> SELECT INSERT('Quadratic', 3, 4, 'What');

        -> 'QuWhattic'

mysql> SELECT INSERT('Quadratic', -1, 4, 'What');

        -> 'Quadratic'

mysql> SELECT INSERT('Quadratic', 3, 100, 'What');

        -> 'QuWhat'

· INSTR(str,substr

返回字符串 str 中子字符串的第一个出现位置。这和LOCATE()的双参数形式相同,除非参数的顺序被颠倒。  

mysql> SELECT INSTR('foobarbar', 'bar');

        -> 4

mysql> SELECT INSTR('xbar', 'foobar');

        -> 0

mysql>

mysql> delimiter $$

mysql>

mysql> CREATE FUNCTION myFunction

        (

            in_string      VARCHAR(255),

            in_find_str    VARCHAR(20),

            in_repl_str    VARCHAR(20)
         )

         RETURNS VARCHAR(255)

         BEGIN

            DECLARE l_new_string VARCHAR(255);

            DECLARE l_find_pos   INT;

         SET l_find_pos=INSTR(in_string,in_find_str);

    

         IF (l_find_pos>0) THEN

            SET l_new_string=INSERT(in_string,l_find_pos,LENGTH  (in_find_str),in_repl_str);

         ELSE

            SET l_new_string=in_string;

         END IF;

         RETURN(l_new_string);

         END $$

Query OK, 0 rows affected (0.00 sec)

mysql>

mysql> delimiter ;

mysql> select myFunction('ABC','A','Z');

+---------------------------+

| myFunction('ABC','A','Z') |

+---------------------------+

| ZBC                       |

+---------------------------+

1 row in set (0.00 sec)

mysql> drop function myFunction;

Query OK, 0 rows affected (0.00 sec)

mysql>

 

mysql中的UDF(自定义函数),实际上是个好东西,好比能够写好一些方法或
函数,而后进行调用,并且是在SQL语句中能够进行调用。
DROP FUNCTION CalculateAmount

CREATE FUNCTION CalculateAmount(userid INT)

RETURNS float(10,2) BEGIN DECLARE totalCredits FLOAT; SELECT SUM(amount) INTO totalAmount FROM credit_user WHERE id =userid; RETURN totalAmount; END  要注意的是,在UDF中,不要定义与数据表中重名的列。而在SQL中, 则能够象如SELECT CalculateAmount(1);那样去调用了

相关文章
相关标签/搜索