2015-09-23 9 views
6

मैं एक निश्चित मूल्य के साथ शुरू एक क्षेत्र से बाहर के साथ मेरी मेज से पंक्तियों को पुनः प्राप्त करने की जरूरत हैमैं यह क्वेरी कैसे कर सकता हूं?</p> <p>मैं वर्तमान में इस तरह एक साधारण क्वेरी के साथ ऐसा कर रहा हूँ:

SELECT A.ID FROM SCHEMA.TABLE A WHERE A.FIELD NOT LIKE 'WORD%' 

हालांकि, मैं सीख लिया है कि A.FIELD में कभी-कभी "शब्द" से पहले रिक्त स्थान की एक अलग संख्या होती है।

जाहिर है, मैं एक और वाइल्डकार्ड के साथ क्वेरी को दोबारा लिख ​​सकता हूं, लेकिन इससे यह गैर-व्यवहार्य हो जाएगा और इसे थोड़ा धीमा कर देगा (यह क्वेरी एक उचित बड़ी मेज पर चलती है और जितनी संभव हो सके उतनी कुशल होनी चाहिए) ।

क्या कोई समस्या है कि मैं इस समस्या को हल करने के लिए एक सार योग्य क्वेरी लिख सकता हूं?

+1

आसान समाधान, अपने डेटा को स्वच्छ करें और प्रमुख रिक्त स्थान से छुटकारा पाएं। एसक्यूएल पिछली जगहों के बारे में परवाह नहीं करता है लेकिन प्रमुख रिक्त स्थान निश्चित रूप से गिनते हैं। –

+0

मैं डेटा को साफ करने के लिए @ क्रिसग्रुटमेयर के साथ हूं। हालांकि, क्या आप कॉलम को ट्रिम कर सकते हैं? एलटीआरआईएम (एफ़िल्ड) – JBond

+0

@ क्रिसग्रुटेमेयर मैंने वास्तव में पहले से ही ऐसा किया है, लेकिन मैं उत्सुक था कि क्या कोई तरीका था कि मैं क्वेरी को फिर से लिख सकता हूं अगर मैं जो कुछ भी डेटा साफ़ करने में सक्षम नहीं होता कारण। – Mansfield

उत्तर

-4

ltrim के बारे में कैसे?

ALTER TABLE YourTable 
    ADD TrimmedYourColumn as (RTRIM(LTRIM(YourColumn))) 

और सूचकांक गणना स्तंभ:

SELECT A.ID FROM SCHEMA.TABLE A WHERE ltrim(A.FIELD) NOT LIKE 'WORD%' 
+6

खैर, यह इस समस्या को ठीक करने के लिए किसी भी तरह से एक सार योग्य क्वेरी लिख सकता है? 'आवश्यकता – Lamak

+0

मैं यह सुनिश्चित करना चाहता हूं कि इंडेक्स का उपयोग किया जाए। मुझे लगता है कि आपको डेटा साफ करना होगा। एसक्यूएल अभी भी तेज है। आपको वह इंडेक्स मिल सकता है या नहीं, आपकी क्वेरी समय-समय पर चलती है। – sean

6

आप किसी भी कारण से डेटा को साफ नहीं कर सकते हैं, एक ही विकल्प है कि सभी प्रमुख और पीछे वाले स्पेस ट्रिम अपनी तालिका में एक गणना स्तंभ जोड़ने के लिए है :

CREATE INDEX IX_YourTable_TrimmedYourColumn 
    ON YourTable (TrimmedYourColumn) 

और अब के बजाय उस स्तंभ खोज:

SELECT A.ID FROM YourTable A WHERE TrimmedYourColumn NOT LIKE 'WORD%' 
+1

SQL सर्वर में कोई 'TRIM' फ़ंक्शन नहीं है जिसे आपको 'LTRIM (RTRIM (YourColumn))' के बजाय उपयोग करने की आवश्यकता है। – lad2025

+1

@ lad2025 बेशक, मुझे यह याद रखना चाहिए था! – DavidG

संबंधित मुद्दे

 संबंधित मुद्दे