Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

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> CREATE TABLE DemoTable1337 (Value VARCHAR(50));

डेटा डालें:

mysql> INSERT INTO DemoTable1337 VALUES('Value400');
mysql> INSERT INTO DemoTable1337 VALUES('Value345');
mysql> INSERT INTO DemoTable1337 VALUES('Value567');
mysql> INSERT INTO DemoTable1337 VALUES('Value489');

डेटा देखें:

mysql> SELECT * FROM DemoTable1337;
+----------+
| Value    |
+----------+
| Value400 |
| Value345 |
| Value567 |
| Value489 |
+----------+

अधिकतम संख्यात्मक मान निकालने की क्वेरी

mysql> SELECT MAX(CAST(SUBSTRING(Value, 6) AS DECIMAL(10,2))) AS MaximumValue 
    -> FROM DemoTable1337;

परिणाम

+--------------+
| MaximumValue |
+--------------+
| 567.00       |
+--------------+

चरण-दर-चरण विश्लेषण

प्रीफिक्स लंबाई डायनामिक हो तो

यदि प्रीफिक्स 'Value' नहीं बल्कि परिवर्तनीय हो:

-- अंतिम अंकों को निकालने के लिए 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;

सामान्य पैटर्न

चरणफ़ंक्शनइनपुटआउटपुट
1SUBSTRING(Value, 6)'Value400''400'
2CAST(... AS DECIMAL(10,2))'400'400.00
3MAX(...)400, 345, 567, 489567.00

डेटा गुणवत्ता जांच

-- गैर-संख्यात्मक सफिक्स वाली पंक्तियां खोजें
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
  • बार-बार क्वेरी के लिए जनरेटेड कॉलम पर विचार करें

यह तकनीक गंदे/अनियमित डेटा को साफ करने और विश्लेषण करने के लिए आवश्यक है।

  1. - MySQL में VARCHAR कॉलम से अधिकतम मान कैसे प्राप्त करें

    समस्या VARCHAR कॉलम पर MAX() सीधे काम नहीं करता क्योंकि स्ट्रिंग तुलना वर्णानुक्रम में होती है। समाधान CAST() का उपयोग करके VARCHAR को UNSIGNED INTEGER में बदलें फिर MAX() लागू करें। उदाहरण INSERT INTO DemoTable2030 VALUES (8), (1), (10001), (901); क्वेरी SELECT MAX(CAST(Value AS UNSIGNED)) FRO

  1. - MySQL REGEXP: विशिष्ट संख्या से शुरू होने वाले स्ट्रिंग+नंबर रिकॉर्ड प्राप्त करें

    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

  1. - MySQL कॉलम से अधिकतम मान प्राप्त करना

    परिचय MySQL में किसी कॉलम का अधिकतम मान प्राप्त करने के लिए MAX() एग्रीगेट फंक्शन या ORDER BY ... DESC LIMIT 1 का उपयोग किया जा सकता है। टेबल निर्माण और डेटा सम्मिलन insert into DemoTable values(58); Query OK, 1 row affected (0.25 sec) सभी रिकॉर्ड प्रदर्शित करना select * from DemoTable; +-------

© कॉपीराइट https://in.wsxdn.com सर्वाधिकार सुरक्षित
पैटर्नSUBSTRING शुरुआतउदाहरण
Prefix123 (फिक्स्ड 6)7SUBSTRING(col, 7)
ID_456 (अंडरस्कोर के बाद)LOCATE('_', col) + 1डायनामिक
ABC-789 (हाइफन के बाद)LOCATE('-', col) + 1डायनामिक