mysql - 在 MySQL 中创建一个带有可选参数的函数

标签 mysql function arguments

我想在 MySQL 中创建一个带有可选参数的函数。例如,我想创建一个函数来计算其参数的平均值。我创建了一个有五个参数的函数,但是当用户只将两个参数传递给该函数时,它仍然应该运行并返回两个参数的平均值。

最佳答案

不能在MySQL存储过程中设置可选参数。
但是,您可以在 MySQL UDF 中设置可选参数。

你知道 MySQL 有一个 AVG aggregate function ?

解决方法 如果您可以面对此解决方法的丑陋之处,请查看示例代码,它使用以逗号分隔的字符串作为输入值并返回平均值。

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 ;

使用 concat_ws 来提供函数。

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

您也可以write an UDFC(++)Delphi/Lazarus

关于mysql - 在 MySQL 中创建一个带有可选参数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4885675/

相关文章:

函数内的 JavaScript 通过变量名调用函数

javascript - 在javascript中删除和添加元素到函数参数列表

python - 在Python中对未指定数量的矩阵参数执行操作

php - 用 explode 和 foreach 分解字符串

MySQL 存储过程返回错误值

shell脚本中的Mysql Dump,自动从settings.php读取DB变量

c++ - 无限脉冲响应 (IIR) 函数

c++ - 作业问题 C++ 中的警告

python - 从Python中带有**kwargs的函数获取带有*args的函数

mysql - 打开移位 V3 : creation of mysql pod fails