Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL में वैकल्पिक तर्कों के साथ एक फ़ंक्शन बनाएँ

आप MySQL संग्रहीत कार्यविधियों में वैकल्पिक पैरामीटर सेट नहीं कर सकते हैं।
हालांकि आप MySQL UDF में वैकल्पिक पैरामीटर सेट कर सकते हैं।

आप जानते हैं कि 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(++) या डेल्फी/लाजर



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्या mysqldump प्रगति पट्टी का समर्थन करता है?

  2. किसी फ़ील्ड से सभी गैर-संख्यात्मक वर्ण हटाएं

  3. बाहरी पुस्तकालयों में जार लेकिन कोड में आयात नहीं कर सकता

  4. mysqld:डीआईआर को डेटा में नहीं बदल सकता। सर्वर प्रारंभ नहीं होता है

  5. क्या MYSQL LIMIT कीवर्ड का कोई ANSI SQL विकल्प है?