mysql可选参数_创建MySQL中的可选参数的函数

bd96500e110b49cbb3cd949968f18be7.png

I want to create a function with optional arguments in MySQL. For instance, I want to create function that calculates the average of its arguments. I create a function of five arguments, but when user passes just two arguments to the function then it should still run and return the average of the two arguments.

解决方案

You cannot set optional parameters in MySQL stored procedures.

You can however set optional parameters in a MySQL UDF.

You do know that MySQL has an AVG aggregate function?

Workaround

If you can face the ugliness of this workaround here's samplecode that uses a comma separated string with values as input and returns the average.

DELIMITER $$

CREATE FUNCTION MyAvg(valuestr varchar) RETURNS float

BEGIN

DECLARE output float;

DECLARE arg_count integer;

DECLARE str_length integer;

DECLARE arg float;

DECLARE i integer;

SET output = NULL;

SET i = LENGTH(valuestr);

IF i > 0 THEN BEGIN

SET arg_count = 1;

WHILE i > 0 DO BEGIN

IF MID(valuestr, i, 1)

SET i = i - 1;

END; END WHILE;

/* calculate average */

SET output = 0;

SET i = arg_count;

WHILE i > 0 DO BEGIN

SET arg = SUBSTRING_INDEX(

SUBSTRING_INDEX(valuestr, ',' , i)

, ',', -1 );

SET output = output + arg;

SET i = i - 1;

END; END WHILE;

SET output = output / arg_count;

END; END IF;

RETURN output;

END $$

DELIMITER ;

Use concat_ws to feed the function.

SELECT MyAvg(CONCAT_WS(',',100,200,300,500)) AS test;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值