sql >> データベース >  >> RDS >> Mysql

MySQLでオプションの引数を使用して関数を作成します

    MySQLストアドプロシージャでオプションのパラメータを設定することはできません。
    ただし、MySQLUDFでオプションのパラメータを設定することはできます。

    MySQLにAVG集計があることをご存知でしょう。関数 ?

    回避策 この回避策の醜さに直面する可能性がある場合は、入力として値を含むコンマ区切りの文字列を使用し、平均を返すサンプルコードを次に示します。

    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 ;
    

    concat_wsを使用して関数をフィードします。

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

    UDFを作成することもできます C(++)> または Delphi / Lazarus



    1. サーバーを再起動せずにMySQLクエリキャッシュをクリアする

    2. MySQLでクエリ結果をコンマ区切りリストとして返す方法

    3. SQL Serverのチューニング–すべては測定に関するものです

    4. MySQLは、スキーマを照会すると変動する行数を示しますか?