RIGHT() और NOT IN के साथ बहिष्करण
कॉलम के अंतिम N वर्णों की जांच करके विशिष्ट सफिक्स वाले मानों को बाहर करने के लिए RIGHT() के साथ NOT IN का उपयोग करें।
उदाहरण: टेबल बनाना और डेटा इन्सर्ट करना
mysql> CREATE TABLE DemoTable(Value INT); Query OK, 0 rows affected (0.71 sec)
रिकॉर्ड्स इन्सर्ट करना
mysql> INSERT INTO DemoTable VALUES(1234),(2345),(7896),(4321); Query OK, 4 rows affected (...)
सभी रिकॉर्ड्स देखना
mysql> SELECT * FROM DemoTable;
+-------+ | Value | +-------+ | 1234 | | 2345 | | 7896 | | 4321 | +-------+ 4 rows in set (0.00 sec)
अंतिम 3 अंक '234' और '321' नहीं वाले रिकॉर्ड्स
mysql> SELECT * FROM DemoTable WHERE RIGHT(Value, 3) NOT IN ('234', '321');
परिणाम
+-------+ | Value | +-------+ | 2345 | | 7896 | +-------+ 2 rows in set (0.00 sec)
तर्क समझना
| Value | RIGHT(Value,3) | NOT IN ('234','321') |
|---|---|---|
| 1234 | '234' | FALSE (बाहर) |
| 2345 | '345' | TRUE (शामिल) |
| 7896 | '896' | TRUE (शामिल) |
| 4321 | '321' | FALSE (बाहर) |
संख्यात्मक कॉलम के लिए कास्टिंग
-- INT/BIGINT कॉलम के लिए
WHERE RIGHT(CAST(Value AS CHAR), 3) NOT IN ('234', '321')
-- या मॉड्यूलो (अंतिम 3 अंक)
WHERE Value % 1000 NOT IN (234, 321)
स्ट्रिंग कॉलम के लिए
WHERE RIGHT(PhoneNumber, 3) NOT IN ('000', '111', '999')
NOT IN vs NOT EXISTS
सबक्वेरी के साथ:
-- NOT IN (NULL होने पर सावधानी)
WHERE RIGHT(Value, 3) NOT IN (SELECT Suffix FROM ExcludedSuffixes)
-- NOT EXISTS (सुरक्षित, NULL-प्रूफ)
WHERE NOT EXISTS (
SELECT 1 FROM ExcludedSuffixes e
WHERE e.Suffix = RIGHT(Value, 3)
)
नियमित अभिव्यक्ति अल्टरनेटिव
WHERE Value NOT REGEXP '(234|321)$'
प्रदर्शन विचार
RIGHT()फंक्शन इंडेक्स उपयोग रोकता है- बड़े टेबल्स के लिए जनरेटेड कॉलम + इंडेक्स:
ALTER TABLE DemoTable ADD Last3Chars VARCHAR(3) AS (RIGHT(CAST(Value AS CHAR), 3)) STORED, ADD INDEX idx_last3 (Last3Chars);
- फिर सरल क्वेरी:
WHERE Last3Chars NOT IN ('234','321')
सामान्य उपयोग के मामले
- परीक्षण/अमान्य फोन नंबर बाहर करना (अंतिम 3 अंक 000, 999, आदि)
- विशिष्ट पिन कोड सफिक्स वाले क्षेत्र बाहर करना
- चेक डिजिट वैलिडेशन में विफल रिकॉर्ड्स फ़िल्टर करना
- आंतरिक/टेस्ट अकाउंट नंबर पैटर्न बाहर करना