Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Utwórz funkcję z opcjonalnymi argumentami w MySQL

Nie można ustawić opcjonalnych parametrów w procedurach składowanych MySQL.
Możesz jednak ustawić opcjonalne parametry w MySQL UDF.

Wiesz, że MySQL ma agregat AVG funkcja ?

Obejście Jeśli możesz zmierzyć się z brzydotą tego obejścia, oto przykładowy kod, który używa ciągu znaków oddzielonych przecinkami z wartościami jako danych wejściowych i zwraca średnią.

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 ;

Użyj concat_ws do zasilania funkcji.

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

Możesz także napisać UDF w C(++) lub Delphi/Lazarus



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mysql COUNT(*) na wielu stołach

  2. Elokwentny groupBy make SQLSTATE[42000] z poprawnym zapytaniem SQL w Laravel 5.3

  3. MySQL dodaje 12 godzin do pola czasu

  4. MySQL, DELETE Query z dołączeniem

  5. przechowywanie kwot pieniężnych w mysql