sql server 2012 - चुनिंदा क्वेरी के खंड में जाने वाले मानों को ट्रिम कैसे करें




sql-server-2012 select (5)

अगर मैं सही ढंग से अपने प्रश्न को समझता हूं तो आप एक्सेल से एडीएचक्च क्वेरी में IN खंड में चिपका रहे हैं।

अनुगामी रिक्त स्थान कोई फर्क नहीं पड़ता। यह अभी भी किसी भी पीछे वाले रिक्त स्थान के बिना स्ट्रिंग foo मिलान होगा

लेकिन आपको यह सुनिश्चित करने की आवश्यकता है कि कोई प्रमुख स्थान नहीं है

जैसा कि डेटा के स्रोत एक्सेल है क्यों न सिर्फ यह सब करते हैं?

आप सूत्र का उपयोग कर सकते हैं

= CONCATENATE("'",TRIM(SUBSTITUTE(A1,"'","''")),"',")

फिर परिणाम की प्रतिलिपि बनाएँ (ऊपर दिए गए स्क्रीनशॉट में कॉलम बी से) और अंतिम प्रवेश से अतिरिक्त अल्पविराम को छूने की आवश्यकता है।

नीचे स्थिति का उपयोग कर रिकॉर्ड का चयन करने के लिए सरल एसक्यूएल क्वेरी है।

--like this I have 6000 usernames
select * from tblUsers where Username in ('abc  ','xyz  ',' pqr  ',' mnop  ' );

मुझे पता है कि LTrim और Rtrim एसक्यूएल में हैं, LTrim सबसे Rtrim पीछे वाले रिक्त स्थान को छोड़कर क्रमशः बाएं और दाएं को हटा दें।

मैं सभी प्रयोक्ता नामों में बाएं और दायां से रिक्त स्थान निकालना चाहता हूं जो कि मैं चयन क्वेरी के लिए आपूर्ति कर रहा हूं।

नोट : -

  • मैं उन मानों को ट्रिम करना चाहता हूं जो मैं इस खंड में पारित कर रहा हूं। ( मैं पारित प्रत्येक मान के लिए LTrim और RTrim पास नहीं करना चाहता )।

  • रिकॉर्ड में कोई पिछली जगह नहीं है, लेकिन मान है कि मैं इस खंड में गुजर रहा हूँ, Excel से कॉपी किया गया है और फिर विजुअल स्टूडियो में चिपकाया गया है। फिर एएलटी कुंजी का उपयोग करते हुए मैंने स्ट्रिंग के बाएं और दाएं किनारे पर 'सिंगल कोट' रखा। इसके कारण कुछ स्ट्रिंग्स की दाईं ओर अनुगामी में रिक्त स्थान हैं।

चयन क्वेरी में trim फ़ंक्शन का उपयोग कैसे करें?

मैं एमएस SQL ​​सर्वर 2012 का उपयोग कर रहा हूँ


आप ऐसा कर सकते हैं:

select * from tblUsers where LTRIM(RTRIM(Username)) in (ltrim(rtrim('abc')),ltrim(rtrim('xyz')),ltrim(rtrim('pqr')),ltrim(rtrim('mnop')));

हालांकि, अगर आपको डेटाबेस अपडेट करने की अनुमति है कृपया अपने Username फ़ील्ड में सभी रिक्त स्थान निकाल दें। यह वास्तव में इस तरह से क्वेरी करने के लिए अच्छा नहीं है


मुझे लगता है कि आप यह कोशिश कर सकते हैं:

बस तालिका 2 को आपके साथ टेबल नाम फ़ॉर्म की जगह दें जहां आप उपयोगकर्ता नाम प्राप्त कर रहे हैं

  select * from tblUsers where Username in ((select distinct 
  STUFF((SELECT distinct ', ' + RTRIM(LTRIM(t1.Username))
         from table2 t1
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,2,'') UserName
from table2 t) );

मैं इसे दो चरणों में करूँगा:

1) रिक्त स्थान के साथ अपने सभी तारों के साथ एक अस्थायी तालिका को आबाद करें

2) उप-चयन के साथ एक चयन करें

create table a (a char(1))

insert into a values('a')
insert into a values('b')
insert into a values('c')
insert into a values('d')

create table #b (atmp char(5))

insert into #b values ('a  ')
insert into #b values (' b')
insert into #b values (' c  ')

select * from a where a in (select ltrim(rtrim(atmp)) from #b)

Answer: SELECT * FROM tblUsers WHERE LTRIM(RTRIM(Username)) in ('abc','xyz','pqr','mnop');

हालांकि, कृपया ध्यान दें कि यदि आपके पास WHERE क्लॉज में functions , तो उस कॉलम पर एक indexes होने के उद्देश्य को धराशायी indexes और यह seek तुलना में scan उपयोग करेगा

मैं आपको tblUsers में डालने से पहले अपने डेटा को साफ करने का प्रस्ताव tblUsers





select