Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Buat fungsi dengan argumen opsional di MySQL

Anda tidak dapat menyetel parameter opsional dalam prosedur tersimpan MySQL.
Namun Anda dapat menyetel parameter opsional di UDF MySQL.

Anda tahu bahwa MySQL memiliki agregat AVG fungsi ?

Solusi Jika Anda dapat menghadapi keburukan dari solusi ini, inilah kode sampel yang menggunakan string yang dipisahkan koma dengan nilai sebagai input dan mengembalikan rata-rata.

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 ;

Gunakan concat_ws untuk memberi makan fungsi.

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

Anda juga dapat menulis UDF di C(++) atau 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. Apakah akan menggunakan SET NAMA

  2. Mengapa beberapa jenis kueri yang disiapkan menggunakan PDO di PHP dengan MySQL lambat?

  3. Perubahan pada my.cnf tidak berlaku (Ubuntu 16.04, mysql 5.6)

  4. MYSQL - datetime ke detik

  5. Sisipkan Tabel MySql jika tidak ada atau perbarui