MySQL 自定義函數 語法:mysql
CREATE FUNCTION sp_name ([func_parameter[,...]])
RETURNS type
[characteristic ...] routine_body
func_parameter:
param_name type
type:
Any valid MySQL data type
characteristic:
LANGUAGE SQL
| [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);那樣去調用了