在MySQL中使用可选参数创建一个函数

Kru*_*nal 22 mysql arguments function

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

Joh*_*ica 5

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

您知道MySQL具有AVG聚合功能吗?

解决方法 如果您可能会遇到此解决方法的丑陋之处,那么这里的示例代码将使用逗号分隔的字符串作为输入值,并返回平均值。

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 ;
Run Code Online (Sandbox Code Playgroud)

使用concat_ws来提供函数。

SELECT MyAvg(CONCAT_WS(',',100,200,300,500)) AS test;
Run Code Online (Sandbox Code Playgroud)

还可以写一个UDFC(++)的Delphi /拉扎勒斯

  • 我看不到您的UDF中的可选参数在哪里。此外,`SQL ERROR(1064)您的SQL语法有错误...。 (3认同)