पॉल डिक्सन के जवाब ने मेरे लिए शानदार काम किया। इसे जोड़ने के लिए, यहां कुछ चीजें दी गई हैं, जिन्हें मैं REGEXP का उपयोग करने में रुचि रखने वालों के लिए देख रहा हूं:
वाइल्डकार्ड के साथ कई तरह के फिल्टर को पूरा करने के लिए:
SELECT * FROM fiberbox WHERE field LIKE '%1740 %'
OR field LIKE '%1938 %'
OR field LIKE '%1940 %';
REGEXP वैकल्पिक का उपयोग करें:
SELECT * FROM fiberbox WHERE field REGEXP '1740 |1938 |1940 ';
REGEXP उद्धरण के भीतर और बीच में मान | (या) ऑपरेटर को वाइल्डकार्ड के रूप में माना जाता है। आमतौर पर, REGEXP को वाइल्डकार्ड एक्सप्रेशंस जैसे (। *) 1740 (? *) के लिए% 1740% काम करना होगा।
यदि आपको वाइल्डकार्ड के प्लेसमेंट पर अधिक नियंत्रण की आवश्यकता है, तो इनमें से कुछ प्रकारों का उपयोग करें:
नियंत्रित वाइल्डकार्ड प्लेसमेंट के साथ पसंद को पूरा करने के लिए:
SELECT * FROM fiberbox WHERE field LIKE '1740 %'
OR field LIKE '%1938 '
OR field LIKE '%1940 % test';
उपयोग:
SELECT * FROM fiberbox WHERE field REGEXP '^1740 |1938 $|1940 (.*) test';
मान के सामने ^ रखने से लाइन की शुरुआत का संकेत मिलता है।
मूल्य के बाद $ रखने से लाइन के अंत का संकेत मिलता है।
रखने से (। *)% वाइल्डकार्ड की तरह व्यवहार होता है।
द। लाइन टूटने को छोड़कर किसी भी एक वर्ण को इंगित करता है। रखने की जगह। अंदर () के साथ * (। *) पंक्ति के अंत तक किसी भी वर्ण का संकेत देने वाला दोहराव पैटर्न जोड़ता है।
विशिष्ट मैचों को कम करने के लिए अधिक कुशल तरीके हैं, लेकिन इसके लिए नियमित अभिव्यक्तियों की अधिक समीक्षा की आवश्यकता है। नोट: सभी regex पैटर्न MySQL स्टेटमेंट में काम नहीं करते हैं। आपको अपने पैटर्न का परीक्षण करना होगा और देखना होगा कि क्या काम करता है।
अंत में, कई तरह की संपत्तियों को पूरा करने के लिए और फिल्टर को पसंद न करें:
SELECT * FROM fiberbox WHERE field LIKE '%1740 %'
OR field LIKE '%1938 %'
OR field NOT LIKE '%1940 %'
OR field NOT LIKE 'test %'
OR field = '9999';
REGEXP वैकल्पिक का उपयोग करें:
SELECT * FROM fiberbox WHERE field REGEXP '1740 |1938 |^9999$'
OR field NOT REGEXP '1940 |^test ';
या मिश्रित वैकल्पिक:
SELECT * FROM fiberbox WHERE field REGEXP '1740 |1938 '
OR field NOT REGEXP '1940 |^test '
OR field NOT LIKE 'test %'
OR field = '9999';
ध्यान दें मैंने एक अलग WHERE फ़िल्टर में सेट नहीं किया है। मैंने निगेटिव पैटर्न, फॉरवर्ड लुकिंग पैटर्न आदि का प्रयोग किया। हालाँकि, ये भाव वांछित परिणाम नहीं देते थे। ऊपर दिए गए पहले उदाहरण में, मैं सटीक मिलान इंगित करने के लिए ^ 9999 $ का उपयोग करता हूं। यह आपको एक ही अभिव्यक्ति में वाइल्डकार्ड मैचों के साथ विशिष्ट मैच जोड़ने की अनुमति देता है। हालाँकि, आप इस प्रकार के कथनों को भी मिला सकते हैं जैसा कि आप सूचीबद्ध दूसरे उदाहरण में देख सकते हैं।
प्रदर्शन के बारे में, मैंने एक मौजूदा तालिका के खिलाफ कुछ मामूली परीक्षण किए और मेरी विविधताओं के बीच कोई अंतर नहीं पाया। हालाँकि, मुझे लगता है कि प्रदर्शन बड़े डेटाबेस, बड़े क्षेत्र, अधिक से अधिक रिकॉर्ड मायने रखता है, और अधिक जटिल फिल्टर के साथ एक मुद्दा हो सकता है।
हमेशा की तरह, ऊपर तर्क का उपयोग करें क्योंकि यह समझ में आता है।
यदि आप नियमित अभिव्यक्तियों के बारे में अधिक जानना चाहते हैं, तो मैं एक अच्छी संदर्भ साइट के रूप में www. अनियमित-expressions.info की सलाह देता हूं।
WHERE FIND_IN_SET(f.fiberbox, "1740,1938,1940")