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

MySQL में VARCHAR कॉलम में संख्यात्मक मानों पर MAX() प्राप्त करने के लिए CAST उपयोग करें

VARCHAR कॉलम में स्टोर संख्याओं का अधिकतम मान निकालना

जब संख्याएं VARCHAR कॉलम में स्टोर होती हैं, तो MAX() स्ट्रिंग तुलना करता है (उदाहरण: '9' > '1000')। CAST(... AS UNSIGNED) से संख्यात्मक तुलना कराएं।

टेबल और डेटा

CREATE TABLE findMaxValueInVarcharField (
    Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Value VARCHAR(200)
);

INSERT INTO findMaxValueInVarcharField (Value) VALUES
('200'), ('1000'), ('899474'), ('39474'), ('4958');

गलत: स्ट्रिंग MAX

SELECT MAX(Value) FROM findMaxValueInVarcharField; -- '999999' टाइप स्ट्रिंग में सबसे बड़ा

सही: संख्यात्मक MAX

SELECT MAX(CAST(Value AS UNSIGNED)) AS MaximumValueFromVarcharField
FROM findMaxValueInVarcharField;

आउटपुट

+------------------------------+
| MaximumValueFromVarcharField |
+------------------------------+
| 899474                       |
+------------------------------+

संबंधित: MIN, ORDER BY, WHERE

-- न्यूनतम
SELECT MIN(CAST(Value AS UNSIGNED)) FROM findMaxValueInVarcharField;

-- क्रमबद्ध
SELECT * FROM findMaxValueInVarcharField
ORDER BY CAST(Value AS UNSIGNED) DESC;

-- फ़िल्टर
SELECT * FROM findMaxValueInVarcharField
WHERE CAST(Value AS UNSIGNED) > 50000;

प्रदर्शन और स्थायी समाधान

  • CAST इंडेक्स उपयोग रोकता है।
  • स्थायी समाधान: कॉलम को BIGINT/INT में बदलें: ALTER TABLE ... MODIFY Value BIGINT UNSIGNED;
  • माइग्रेशन बिना: जनरेटेड कॉलम + इंडेक्स (MySQL 5.7+):
    ALTER TABLE findMaxValueInVarcharField
    ADD COLUMN num_val BIGINT UNSIGNED GENERATED ALWAYS AS (CAST(Value AS UNSIGNED)) STORED,
    ADD INDEX idx_num_val (num_val);
  • फिर MAX(num_val) या ORDER BY num_val तेज़ होगा।
  1. - MySQL में चौथा सबसे बड़ा मान कैसे प्राप्त करें

    LIMIT OFFSET के साथ N-वां सबसे बड़ा मान अवरोही क्रम में क्रमबद्ध करके LIMIT 1 OFFSET N-1 से N-वां सबसे बड़ा मान प्राप्त करें। चौथे सबसे बड़े के लिए OFFSET 3। टेबल और डेटा CREATE TABLE DemoTable ( Amount INT ); Query OK, 0 rows affected (0.88 sec) INSERT INTO DemoTable VALUES(198); Query OK,

  1. - MySQL में MAX() एग्रीगेट फंक्शन का उपयोग करके कॉलम का अधिकतम मान प्राप्त करें

    MySQL MAX() फंक्शन: कॉलम का अधिकतम मान खोजना MAX() एक एग्रीगेट फंक्शन है जो एक कॉलम में सबसे बड़ा मान लौटाता है। यह संख्याओं, तारीखों, और स्ट्रिंग्स (वर्णानुक्रम में अंतिम) पर काम करता है। उदाहरण: ID कॉलम का अधिकतम मान टेबल बनाएं और डेटा डालें: CREATE TABLE DemoTable (Id INT); INSERT INTO DemoTabl

  1. - MySQL में स्ट्रिंग फील्ड में संख्यात्मक वर्णों के आधार पर पंक्तियों को समूहित करें

    स्ट्रिंग फील्ड के साथ शून्य (0) जोड़कर MySQL के निहित प्रकार रूपांतरण का उपयोग करके अग्रणी संख्यात्मक भाग निकालें। टेबल बनाना और डेटा डालना CREATE TABLE DemoTable (StudentId VARCHAR(100)); Query OK, 0 rows affected (0.92 sec) INSERT INTO DemoTable VALUES(9844Bob),(6375DavidMiller),(007),(97474Bo