Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Erstellen Sie eine Funktion mit optionalen Argumenten in MySQL

Sie können keine optionalen Parameter in gespeicherten MySQL-Prozeduren festlegen.
Sie können jedoch optionale Parameter in einer MySQL-UDF festlegen.

Sie wissen, dass MySQL ein AVG-Aggregat hat Funktion ?

Problemumgehung Wenn Sie sich der Hässlichkeit dieser Problemumgehung stellen können, finden Sie hier einen Beispielcode, der eine durch Kommas getrennte Zeichenfolge mit Werten als Eingabe verwendet und den Durchschnitt zurückgibt.

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 ;

Verwenden Sie concat_ws, um die Funktion zu füttern.

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

Sie können auch eine UDF schreiben in C(++) oder Delphi/Lazarus