मुझे नहीं लगता कि पूर्ण पाठ खोज आपकी मदद करेगा। ऐसा लगता है कि आप तकनीकी शब्दों जैसे /1/
. जैसे किसी खंड की तलाश कर रहे हैं ।
एक्सएमएल के लिए इसे आजमाएं
DECLARE @SearchFor VARCHAR(100)='1';
SELECT *
FROM SettingsData
WHERE xmldata.exist(N'//*[contains(text()[1],sql:variable("@SearchFor"))]')=1;
यह किसी भी नोड के आंतरिक text()
. की जांच करेगा यदि इसमें खोज वाक्यांश है। लेकिन 1
. के साथ कोई भी मान अंदर पाया जाता है (उदाहरण के लिए कोई भी असंबंधित संख्या जिसमें 1
. है कहीं।) आप text()="1"
. की खोज कर सकते हैं और contains
. का प्रदर्शन करें केवल तभी जब स्ट्रिंग की लंबाई एक निश्चित न्यूनतम से अधिक हो।
कुछ इस तरह
WHERE xmldata.exist(N'//*[text()[1]=sql:variable("@SearchFor") or(string-length(text()[1])>=3 and contains(text()[1],concat("/",sql:variable("@SearchFor"),"/")))]')=1;
जेसन है - अब तक - एक स्ट्रिंग से ज्यादा कुछ नहीं और इसे पार्स किया जाना चाहिए। v2016 के साथ Microsoft ने JSON समर्थन पेश किया, लेकिन आप v2012 पर हैं। LIKE
. के साथ समस्या JSON-स्ट्रिंग पर खोज हो सकती है, कि आप 1 को किसी तत्व के नाम के हिस्से के रूप में भी पाएंगे। बाकी ऊपर जैसा है...
SELECT *
FROM SettingsData
WHERE jsondata LIKE '%' + @SearchFor + '%';