sql >> Database teknologi >  >> RDS >> Mysql

Opret en funktion med valgfri argumenter i MySQL

Du kan ikke indstille valgfrie parametre i MySQL-lagrede procedurer.
Du kan dog indstille valgfrie parametre i en MySQL UDF.

Du ved, at MySQL har et AVG-aggregat funktion ?

Løsning Hvis du kan se det grimme ved denne løsning, er her eksempelkode, der bruger en kommasepareret streng med værdier som input og returnerer gennemsnittet.

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 ;

Brug concat_ws til at fodre funktionen.

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

Du kan også skrive en UDF i C(++) eller Delphi/Lazarus



  1. indsætte kontakter i databasen, men ønsker ikke at duplikere allerede eksisterende kontakt

  2. Postgres UNIK BEGRÆNSNING for array

  3. Billeder i MySQL

  4. Funktion eller procedure for en IN-klausul