MySQL में REGEXP ऑपरेटर का उपयोग करके पाइप (|) से अलग किए गए मानों वाले कॉलम में विशिष्ट मान खोज सकते हैं।
समस्या
कॉलम में '8|56|78|45' जैसा डेटा है। साधारण LIKE '%8%' से 8, 58, 80, 98 आदि सभी मिलेंगे। सटीक मिलान के लिए रेगुलर एक्सप्रेशन चाहिए।
समाधान: शब्द सीमा पैटर्न
WHERE कॉलम REGEXP '[[:<:]]8[[:>:]]' -- या पाइप के लिए विशेष पैटर्न WHERE कॉलम REGEXP '\\|8\\|'
उदाहरण
1. टेबल बनाएं
mysql> CREATE TABLE DemoTable (
-> Value VARCHAR(60)
-> );
2. डेटा डालें
mysql> INSERT INTO DemoTable VALUES('8|56|78|45');
mysql> INSERT INTO DemoTable VALUES('9876');
mysql> INSERT INTO DemoTable VALUES('98|8');
mysql> INSERT INTO DemoTable VALUES('3|8|9');
mysql> INSERT INTO DemoTable VALUES('97|94');
mysql> INSERT INTO DemoTable VALUES('103|104|110|8|97');
4. पैटर्न '\\|8\\|' से खोजें (पाइप के बीच 8)
mysql> SELECT * FROM DemoTable WHERE Value REGEXP '\\|8\\|';
5. परिणाम
+------------------+ | Value | +------------------+ | 3|8|9 | | 103|104|110|8|97 | +------------------+
पैटर्न समझाया
\\|- शाब्दिक पाइप वर्ण (एस्केप्ड)8- खोजा जाने वाला मान\\|- शाब्दिक पाइप वर्ण- यह सुनिश्चित करता है कि 8 पाइप के बीच में है
किनारे के मामले संभालें
-- शुरुआत में: '8|...' के लिए WHERE Value REGEXP '^8\\|' -- अंत में: '...|8' के लिए WHERE Value REGEXP '\\|8$' -- अकेला मान: '8' के लिए WHERE Value = '8' -- संयुक्त: किसी भी स्थिति में 8 WHERE Value REGEXP '(^|\\|)8(\\||$)'
बेहतर विकल्प
सामान्यीकृत डिज़ाइन (अलग टेबल में पंक्तियां) क्वेरी प्रदर्शन और अखंडता के लिए बेहतर है।