यहाँ के साथ मिलान पैटर्न एक समस्या मैं बार-बार Stack Exchange Data Explorer, जो T-SQL पर आधारित है के साथ खेलते हुए का सामना करना पड़ा है या नहीं:T-SQL अपवाद
को छोड़कर एक स्ट्रिंग के लिए खोज करने के लिए कैसे जब यह एक के रूप में होता कुछ अन्य स्ट्रिंग का सबस्ट्रिंग?
उदाहरण के लिए, मैं कैसे चुन सकते हैं एक मेज MyTable
जहां स्तंभ MyCol
स्ट्रिंग foo
, लेकिन किसी भी foo
कि स्ट्रिंग foobar
का हिस्सा हैं अनदेखी शामिल में सभी रिकॉर्ड? कुछ
एक त्वरित और गंदे प्रयास होगा की तरह:
SELECT *
FROM MyTable
WHERE MyCol LIKE '%foo%'
AND MyCol NOT LIKE '%foobar%'
लेकिन स्पष्ट रूप से इस मैच के लिए उदाहरण के लिए असफल हो जायेगी MyCol = 'not all foos are foobars'
, जो मैं मिलान करना चाहता हूं।
एक समाधान मैं ले कर आए हैं, कुछ डमी मार्कर के साथ foobar
की सभी घटनाओं (कि foo
की सबस्ट्रिंग नहीं है) और फिर किसी भी शेष foo
रों के लिए जाँच की जगह में है:
SELECT *
FROM MyTable
WHERE REPLACE(MyCol, 'foobar', 'X') LIKE '%foo%'
यह काम करता है, लेकिन मुझे संदेह है कि यह बहुत कुशल नहीं है, क्योंकि इसे तालिका में प्रत्येक रिकॉर्ड पर REPLACE()
चलाया जाना है। (SEDE के लिए, यह आमतौर पर Posts
तालिका होगी, जिसमें वर्तमान में लगभग 30 मिलियन पंक्तियां हैं।) क्या ऐसा करने के कोई बेहतर तरीके हैं?
(Fwiw, the real use case कि इस सवाल का संकेत दिए जाने पर एसओ चित्र URL कि http://
योजना उपसर्ग का उपयोग लेकिन मेजबान i.stack.imgur.com
को इंगित नहीं है के साथ पदों के लिए खोज रहा था।)
है कि बढ़ती है
IIF
की वाक्यात्मक चीनी विविधता बाहर का उपयोग आप का आयोजन किया संस्करण के साथ खेल रहे हैं, या आप डेटा अपने स्थानीय सिस्टम पर साथ खेलने के लिए डाउनलोड कर रहे हैं? यदि आप स्थानीय रूप से डाउनलोड कर रहे हैं, या यदि आपको पता नहीं था कि यह विकल्प था, तो आप SQLCLR के माध्यम से RegEx कार्यक्षमता जोड़ सकते हैं। उदाहरण के लिए, आप [SQL #] (http://SQLsharp.com/) लाइब्रेरी डाउनलोड कर सकते हैं (जिसे मैंने लिखा था, लेकिन RegEx सामग्री फ्री संस्करण में है), इसे 'उपयोगिता' डीबी में स्थापित करें, और उसके बाद उपयोग करें यह इस या अन्य सामान के लिए पूछताछ में :-)। –@srutzky: मैं होस्टेड डीबी का उपयोग कर रहा हूं। मुझे लगता है कि मैं डेटा डाउनलोड करने में देख सकता हूं, लेकिन एक समाधान जो ऑनलाइन काम करता है वह बेहतर होगा। –