sql >> Database >  >> RDS >> Mysql

Maak een functie met optionele argumenten in MySQL

U kunt geen optionele parameters instellen in MySQL-opgeslagen procedures.
U kunt echter wel optionele parameters instellen in een MySQL UDF.

U weet dat MySQL een AVG-aggregaat heeft functie ?

Oplossing Als je de lelijkheid van deze tijdelijke oplossing onder ogen kunt zien, is hier de voorbeeldcode die een door komma's gescheiden tekenreeks met waarden als invoer gebruikt en het gemiddelde retourneert.

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 ;

Gebruik concat_ws om de functie te voeden.

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

U kunt ook een UDF schrijven in C(++) of Delphi/Lazarus



  1. Wat is efficiënter:meerdere MySQL-tabellen of één grote tafel?

  2. FATAL:wachtwoordverificatie mislukt voor gebruiker postgres (postgresql 11 met pgAdmin 4)

  3. Ondersteunt de MySQLdb-module voorbereide instructies?

  4. Hoe gefilterde indexen een krachtigere functie kunnen zijn