sql >> Databáze >  >> RDS >> Mysql

Vytvořte funkci s volitelnými argumenty v MySQL

Nemůžete nastavit volitelné parametry v uložených procedurách MySQL.
V MySQL UDF však můžete nastavit volitelné parametry.

Víte, že MySQL má agregát AVG funkce ?

Řešení Pokud dokážete čelit ošklivosti tohoto řešení, zde je ukázkový kód, který jako vstup používá řetězec oddělený čárkou s hodnotami a vrací průměr.

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 ;

Použijte concat_ws k naplnění funkce.

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

Můžete také napsat UDF v C(++) nebo Delphi/Lazarus



  1. Příklad replikace Oracle Streams krok za krokem

  2. Maximální doba provádění v phpMyAdmin

  3. Jak znovu vytvořit nekonzistentní PostgreSQL Slave

  4. Upozornění:Nelze upravit informace v záhlaví - záhlaví již byla odeslána omylem