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

MySQL में दो स्ट्रिंग की तुलना जो संख्याएँ हैं - CAST फ़ंक्शन का उपयोग

समस्या

जब संख्यात्मक डेटा VARCHAR/CHAR कॉलम में संग्रहीत होता है, तो स्ट्रिंग तुलना वर्णानुक्रम में होती है (जैसे '9' > '10'), जो गलत संख्यात्मक तुलना देता है।

समाधान: CAST() फ़ंक्शन

स्ट्रिंग को संख्यात्मक प्रकार में बदलने के लिए CAST() का उपयोग करें, फिर तुलना करें।

सिंटैक्स

SELECT * FROM yourTableName 
WHERE CAST(yourColumnName AS SIGNED) = yourIntegerValue;

व्यावहारिक उदाहरण

टेबल बनाना और स्ट्रिंग संख्या डालना

mysql> CREATE TABLE compareTwoStringDemo (UserId VARCHAR(100));

mysql> INSERT INTO compareTwoStringDemo VALUES
    -> ('1083745'), ('9867585'), ('3547483'), ('9845646'), ('9876532');

स्ट्रिंग तुलना (गलत)

mysql> SELECT * FROM compareTwoStringDemo WHERE UserId = '3547483';

यह काम करता है क्योंकि सटीक स्ट्रिंग मिलान है।

समस्या: रेंज तुलना

-- स्ट्रिंग तुलना: '9' > '1000000' (वर्णानुक्रम में सही, संख्यात्मक रूप से गलत)
SELECT * FROM compareTwoStringDemo WHERE UserId > '5000000';

CAST के साथ सही संख्यात्मक तुलना

mysql> SELECT * FROM compareTwoStringDemo 
    -> WHERE CAST(UserId AS SIGNED) = 3547483;

परिणाम

+---------+
| UserId  |
+---------+
| 3547483 |
+---------+

CAST विकल्प

प्रकारविवरणरेंज
SIGNEDहस्ताक्षरित पूर्णांक-2147483648 से 2147483647
UNSIGNEDअहस्ताक्षरित पूर्णांक0 से 4294967295
DECIMALदशमलव संख्यासटीक दशमलव
CHARस्ट्रिंगN वर्ण

आधुनिक विकल्प: + 0 ट्रिक

SELECT * FROM compareTwoStringDemo WHERE UserId + 0 = 3547483;

MySQL स्वचालित रूप से स्ट्रिंग को संख्या में बदल देता है जब अंकगणितीय संक्रिया की जाती है।

सर्वोत्तम अभ्यास

  • संख्यात्मक डेटा के लिए हमेशा संख्यात्मक डेटा प्रकार (INT, DECIMAL) का उपयोग करें
  • स्ट्रिंग में संख्या संग्रहीत करना डिज़ाइन त्रुटि है
  • माइग्रेशन के दौरान CAST का उपयोग करें, स्थायी समाधान के लिए नहीं
  1. - MySQL में एक ही क्वेरी से दो टेबल्स की पंक्तियों को कैसे काउंट करें

    सबक्वेरीज़ के साथ दो टेबल्स की रो काउंट एक साथ प्राप्त करना एक ही क्वेरी में दो अलग-अलग टेबल्स की पंक्ति संख्या गिनने के लिए सबक्वेरीज़ का उपयोग करें। पहली टेबल बनाएं: mysql> CREATE TABLE DemoTable1 ( Name VARCHAR(40) ); रिकॉर्ड्स इन्सर्ट करें: mysql> INSERT INTO DemoTable1 VALUES (Chris);

  1. - MySQL में दो कॉलम बराबर होने पर पंक्ति डिलीट कैसे करें

    WHERE क्लॉज में कॉलम तुलना के साथ DELETE दो कॉलम्स के मान समान होने पर पंक्ति डिलीट करने के लिए DELETE के साथ WHERE column1 = column2 का उपयोग करें। आइए पहले एक टेबल बनाते हैं: mysql> CREATE TABLE DemoTable ( Name VARCHAR(40), Score1 INT, Score2 INT ); रिकॉर्ड्स इन्सर्ट करें: mysql>

  1. - MySQL क्वेरी: अंकों के बीच स्पेस वाले नंबरों को फॉर्मेट करें

    परिचय जब नंबर स्ट्रिंग के रूप में स्टोर होते हैं और उनमें स्पेस होते हैं (जैसे 145 78 90), तो MySQL के REPLACE() फंक्शन का उपयोग करके स्पेस हटाकर साफ नंबर प्राप्त किया जा सकता है। उदाहरण: टेबल बनाना और डेटा डालना ); Query OK, 0 rows affected (0.99 sec) INSERT INTO DemoTable1546 VALUES(1345 7894