MySQL में MAX(), SUBSTRING(), CAST से स्ट्रिंग-संख्या कॉलम (Value440, Value345) में अधिकतम मान निकालें
MySQL में जब संख्यात्मक मान स्ट्रिंग प्रीफिक्स के साथ संग्रहीत हों (जैसे 'Value440', 'Value345'), तो SUBSTRING() से संख्यात्मक भाग निकालें, CAST() से संख्या में बदलें, फिर MAX() से अधिकतम मान प्राप्त करें।
सिंटैक्स
SELECT MAX(CAST(SUBSTRING(string_column, start_position) AS DECIMAL(10,2)))
FROM table_name;
mysql> INSERT INTO DemoTable1337 VALUES('Value400');
mysql> INSERT INTO DemoTable1337 VALUES('Value345');
mysql> INSERT INTO DemoTable1337 VALUES('Value567');
mysql> INSERT INTO DemoTable1337 VALUES('Value489');
-- अंतिम अंकों को निकालने के लिए REGEXP (MySQL 8.0+)
SELECT MAX(CAST(REGEXP_SUBSTR(Value, '[0-9]+$') AS UNSIGNED)) FROM DemoTable1337;
-- या LENGTH/LOCATE के साथ
SELECT MAX(CAST(SUBSTRING(Value, LOCATE('Value', Value) + 5) AS UNSIGNED)) FROM DemoTable1337;
सामान्य पैटर्न
पैटर्न
SUBSTRING शुरुआत
उदाहरण
Prefix123 (फिक्स्ड 6)
7
SUBSTRING(col, 7)
ID_456 (अंडरस्कोर के बाद)
LOCATE('_', col) + 1
डायनामिक
ABC-789 (हाइफन के बाद)
LOCATE('-', col) + 1
डायनामिक
डेटा गुणवत्ता जांच
-- गैर-संख्यात्मक सफिक्स वाली पंक्तियां खोजें
SELECT Value FROM DemoTable1337
WHERE SUBSTRING(Value, 6) NOT REGEXP '^[0-9]+$';
प्रदर्शन नोट
SUBSTRING + CAST प्रत्येक पंक्ति के लिए चलता है - इंडेक्स उपयोग नहीं
बड़े टेबल पर धीमा हो सकता है
बेहतर: संख्यात्मक भाग को अलग कॉलम में संग्रहीत करें (जनरेटेड कॉलम या ट्रिगर)
जनरेटेड कॉलम समाधान (MySQL 5.7+)
ALTER TABLE DemoTable1337
ADD COLUMN numeric_value INT
AS (CAST(SUBSTRING(Value, 6) AS UNSIGNED)) STORED;
CREATE INDEX idx_numeric ON DemoTable1337(numeric_value);
-- फिर सरल क्वेरी
SELECT MAX(numeric_value) FROM DemoTable1337;
सारांश
SUBSTRING - संख्यात्मक भाग निकालें
CAST(... AS DECIMAL/UNSIGNED) - संख्या में बदलें
MAX() - अधिकतम मान प्राप्त करें
फिक्स्ड प्रीफिक्स के लिए हार्डकोडेड स्थिति; वेरिएबल के लिए LOCATE/REGEXP
बार-बार क्वेरी के लिए जनरेटेड कॉलम पर विचार करें
यह तकनीक गंदे/अनियमित डेटा को साफ करने और विश्लेषण करने के लिए आवश्यक है।
समस्या
VARCHAR कॉलम पर MAX() सीधे काम नहीं करता क्योंकि स्ट्रिंग तुलना वर्णानुक्रम में होती है।
समाधान
CAST() का उपयोग करके VARCHAR को UNSIGNED INTEGER में बदलें फिर MAX() लागू करें।
उदाहरण
INSERT INTO DemoTable2030 VALUES (8), (1), (10001), (901);
क्वेरी
SELECT MAX(CAST(Value AS UNSIGNED)) FRO
REGEXP पैटर्न
Select yourColumnName1, yourColumnName2 from yourTableName where yourColumnName2 REGEXP ^yourStringValue[yourNumericValue];
उदाहरण: John से शुरू और फिर 5 या 6
insert into demo45(value) values(John500), (John1500), (John5500), (John6500), (John8600);
क्वेरी: ^John[56]
select id,val
परिचय
MySQL में किसी कॉलम का अधिकतम मान प्राप्त करने के लिए MAX() एग्रीगेट फंक्शन या ORDER BY ... DESC LIMIT 1 का उपयोग किया जा सकता है।
टेबल निर्माण और डेटा सम्मिलन
insert into DemoTable values(58);
Query OK, 1 row affected (0.25 sec)
सभी रिकॉर्ड प्रदर्शित करना
select * from DemoTable;
+-------