MySQL में FIND_IN_SET() और CASE स्टेटमेंट का उपयोग करके कॉमा से अलग महीना संख्याओं को महीना नामों में बदला जा सकता है।
उदाहरण
तालिका बनाएं और डेटा डालें:
mysql> CREATE TABLE DemoTable (Month VARCHAR(100));
mysql> INSERT INTO DemoTable VALUES ('2,4,6'), ('1,3,5,12'), ('7,8,9,10');
क्वेरी
mysql> SELECT TRIM(TRAILING ',' FROM CONCAT(
-> CASE WHEN FIND_IN_SET(1, Month) THEN 'January,' ELSE '' END,
-> CASE WHEN FIND_IN_SET(2, Month) THEN 'February,' ELSE '' END,
-> CASE WHEN FIND_IN_SET(3, Month) THEN 'March,' ELSE '' END,
-> CASE WHEN FIND_IN_SET(4, Month) THEN 'April,' ELSE '' END,
-> CASE WHEN FIND_IN_SET(5, Month) THEN 'May,' ELSE '' END,
-> CASE WHEN FIND_IN_SET(6, Month) THEN 'June,' ELSE '' END,
-> CASE WHEN FIND_IN_SET(7, Month) THEN 'July,' ELSE '' END,
-> CASE WHEN FIND_IN_SET(8, Month) THEN 'August,' ELSE '' END,
-> CASE WHEN FIND_IN_SET(9, Month) THEN 'September,' ELSE '' END,
-> CASE WHEN FIND_IN_SET(10, Month) THEN 'October,' ELSE '' END,
-> CASE WHEN FIND_IN_SET(11, Month) THEN 'November,' ELSE '' END,
-> CASE WHEN FIND_IN_SET(12, Month) THEN 'December,' ELSE '' END
-> )) FROM DemoTable;
परिणाम
+--------------------------------------------------+
| February,April,June |
| January,March,May,December |
| July,August,September,October |
+--------------------------------------------------+
व्याख्या
FIND_IN_SET(n, Month)- जांचता है कि संख्या n सूची में हैCASE WHEN ... THEN 'Name,' ELSE '' END- मिलने पर नाम जोड़ता हैCONCAT()- सभी परिणाम जोड़ता हैTRIM(TRAILING ',' ...)- अंतिम कॉमा हटाता है
बेहतर विकल्प (MySQL 8.0+)
JSON_TABLE या रिकर्सिव CTE का उपयोग करके अधिक स्केलेबल समाधान।
चेतावनी
- हार्डकोडेड CASE स्टेटमेंट - रखरखाव मुश्किल
- प्रदर्शन: प्रत्येक पंक्ति के लिए 12 FIND_IN_SET कॉल
- डेटा डिज़ाइन सुधार: अलग तालिका में महीना संख्याएं संग्रहीत करें
सुझाव: एप्लिकेशन लेयर पर यह रूपांतरण करना अधिक कुशल है।