sql >> Databasteknik >  >> RDS >> Mysql

Skapa en funktion med valfria argument i MySQL

Du kan inte ställa in valfria parametrar i MySQL lagrade procedurer.
Du kan dock ställa in valfria parametrar i en MySQL UDF.

Du vet att MySQL har ett AVG-aggregat funktion ?

Lösning Om du kan möta det fula med den här lösningen är här exempelkoden som använder en kommaseparerad sträng med värden som indata och returnerar genomsnittet.

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 ;

Använd concat_ws för att mata funktionen.

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

Du kan också skriva en UDF i C(++) eller Delphi/Lazarus



  1. MySQL Räkna distinkta värden från en kolumn

  2. NLS_CHARSET_ID() Funktion i Oracle

  3. FATAL:lösenordsautentisering misslyckades för användare postgres (postgresql 11 med pgAdmin 4)

  4. Ansluter Snowflake DB &IRI Workbench