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);那樣去調用了

相關文章
相關標籤/搜索