MySQL में CAST() का उपयोग MAX() के अंदर करके आप VARCHAR कॉलम में संग्रहीत संख्यात्मक स्ट्रिंग्स का सही अधिकतम मान प्राप्त कर सकते हैं। स्ट्रिंग तुलना में '9' > '100' होता है, इसलिए कास्टिंग आवश्यक है।
उदाहरण तालिका बनाना (VARCHAR कॉलम)
mysql> CREATE TABLE DemoTable (UserMarks VARCHAR(20));
संख्यात्मक स्ट्रिंग डालना
mysql> INSERT INTO DemoTable VALUES ('77'), ('98'), ('45'), ('56'), ('89'), ('99'), ('91'), ('94');
डेटा देखना
mysql> SELECT * FROM DemoTable;
आउटपुट:
+-----------+ | UserMarks | +-----------+ | 77 | | 98 | | 45 | | 56 | | 89 | | 99 | | 91 | | 94 | +-----------+
CAST के साथ सही अधिकतम मान प्राप्त करना
mysql> SELECT MAX(CAST(UserMarks AS SIGNED)) AS MAX_VALUE FROM DemoTable;
आउटपुट:
+-----------+ | MAX_VALUE | +-----------+ | 99 | +-----------+
व्याख्या:
- समस्या:
MAX(UserMarks)स्ट्रिंग तुलना करता है → '99' > '98' > ... > '9' > '89' (लेक्सिकोग्राफिक)। '9' '89' से बड़ा माना जाएगा! - समाधान:
CAST(UserMarks AS SIGNED)प्रत्येक मान को संख्या में बदलता है, फिरMAX()सही संख्यात्मक अधिकतम ढूंढता है
कास्टिंग विकल्प:
CAST(UserMarks AS UNSIGNED)- केवल गैर-ऋणात्मकCAST(UserMarks AS DECIMAL)- दशमलव मानों के लिएUserMarks + 0- अंतर्निहित कास्ट (MySQL विशिष्ट)
चेतावनी: गैर-संख्यात्मक मान (जैसे 'abc') कास्ट होने पर 0 बन जाते हैं। डेटा सफाई के लिए पहले फ़िल्टर करें: WHERE UserMarks REGEXP '^[0-9]+$'