mysql 自定义函数 in_MySQL 自定义函数

MySQL 自定义函数 语法:

CREATE FUNCTIONsp_name([func_parameter[,...]])

RETURNStype

[characteristic...]routine_body

func_parameter:

param_nametype

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);那样去调用了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值