2012-06-14 6 views
5

मैं एसक्यूएल सर्वर में यह करने के लिए हैमें एसक्यूएल सर्वर क्वेरी के माध्यम से शब्द में ही बड़े अक्षरों को खोजने के लिए कैसे

मैं ऐसे

Belo Horizonte , MG - Brazil 
São Paulo , SP - Brazil 
Barueri , SP - Brazil 
Ferraz de Vasconcelos , SP - Brazil 

मुझे लगता है कि के रूप में मेल खाता है दो पत्र शब्द का चयन करने की आवश्यकता है के रूप में डेटा है पैटर्न

Space Letter Letter 

मैं इस

SUBSTRING(ADDRESS_BLOCK,PatIndex('% [A-Z][A-Z] %',ADDRESS_BLOCK),3) 
की कोशिश की है

लेकिन मैं इस (यानी) उत्पादन के लिए के रूप में समस्या

पर Ferraz de Vasconcelos , SP - Brazil

साफ दृश्य उदाहरण की अंतिम पंक्ति में पाया जा सकता

MG SP SP SP 

और न शामिल de है केवल बड़े अक्षरों विचार करने की जरूरत

उदाहरण के लिए: वैष्णव सेंट northwind जी एच - परिणाम हो गया है जी एच

somersert PM vailash hj --Result has to be PM 
+0

खेद का कारण बना .. –

+1

क्या मिलान अनुक्रम स्तंभ का उपयोग किया जाता है? – JAQFrost

+0

संगठनात्मक हम जीनेरिक का उपयोग करते हैं- इसका मामला संवेदनशील नहीं है (अंग्रेजी) –

उत्तर

0

एस चुनाव अल्पविराम के बाद 2 leters:

select substring(columnname, charindex(',', columnname) + 2, 2) 
from tablename 

या - का उपयोग कर:

select substring(columnname, charindex('-', columnname) - 3, 2) 
from tablename 

अंतिम, सुरुचिपूर्ण नहीं, समाधान:

SUBSTRING(ADDRESS_BLOCK,PatIndex('% [ABCDEFGHIJKLMOPQWXYZ][ABCDEFGHIJKLMOPQWXYZ] %',ADDRESS_BLOCK),3) 

यह दो बड़े अक्षरों का चयन करता है।

+0

मैंने एक उदाहरण दिया है लेकिन सभी मानों के पास नहीं होगा, –

+0

@ अरुण कुमार क्या उनके पास '-' बाद के शब्द हैं? –

+0

धन्यवाद इसके उत्तर आपके लिए उपयुक्त हैं लेकिन मेरे सभी डेटा bcoz के लिए कभी-कभी इसका अंतिम शब्द (-ब्राज़िल) नहीं हो सकता है और कुछ बार यह contan नहीं होगा, –

-1

संयोजन मामलों। - अपने वर्तमान एक स्पष्ट रूप से मामला असंवेदनशील है

Select * from table where exists (Select SUBSTRING(ADDRESS_BLOCK,PatIndex('% [A-Z][A-Z] %',ADDRESS_BLOCK),3) from table) 
COLLATE Latin1_General_CS_AS_KS_WS ASC; 

आप एक अंतर मिलान आवश्यकता हो सकती है: आप इस तरह के रूप आपकी क्वेरी के लिए Collate जोड़ने के लिए, की जरूरत है। आप वर्तमान collation के मामले senstive संस्करण प्राप्त करने के लिए, CS के साथ CI को प्रतिस्थापित करने के लिए आपको वर्तमान कॉलेशन मिल सकता है, और Latin1_General_CS_AS_KS_WS को प्रतिस्थापित कर सकता है।

देखें: http://msdn.microsoft.com/en-us/library/ms184391.aspx

+0

डाउनवॉटिंग के बजाय, एक टिप्पणी उपयोगी होगी। कोई भी मुझे गलत समझने के लिए प्रबुद्ध करना चाहता है? –

0

तुम सिर्फ यह कोशिश की जा सकी:

SUBSTRING([ADDRESS_BLOCK],PatIndex('%, [A-Z][A-Z] -%',[ADDRESS_BLOCK])+2,2) 

Example

+0

यह इस मामले में काम नहीं करता है AV। ब्रिगेडियर। फरीया लीमा, 1355 4º एंडार साओ पाउलो, एसपी 01452-002 ब्राजील –

+0

क्या दो वर्णों से पहले हमेशा '[COMMA] 'और' [स्पेस]' होगा? क्या यह उपयोगकर्ता इनपुट से है या आप मूल्य उत्पन्न कर रहे हैं? – bendataclear

+0

मामला 1 है) हमेशा दो charaters के बीच एक जगह है लेकिन अल्पविराम को आश्वस्त नहीं किया जा सकता है क्योंकि इसमें कॉमा –

3

इस प्रयास करें: आप की जरूरत है दोनों स्तंभ मुक़ाबला और बड़े अक्षर निर्दिष्ट करने के लिए। नियमित अभिव्यक्ति [ए-जेड] केस संवेदनशील नहीं है, भले ही आप एक संयोजन अनुक्रम निर्दिष्ट करते हैं।

SELECT SUBSTRING(
      ADDRESS_BLOCK 
      , PatIndex( 
       N'% [ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ] %' 
       , ADDRESS_BLOCK COLLATE sql_latin1_general_cp1_cs_as 
       ) 
      , 3 
      ) 
FROM 
    (
     SELECT 'Belo Horizonte , MG - Brazil' ADDRESS_BLOCK 
     UNION 
     SELECT 'São Paulo , SP - Brazil' 
     UNION 
     SELECT 'Barueri , SP - Brazil' 
     UNION 
     SELECT 'Ferraz de Vasconcelos , SP - Brazil' 
    ) n 
0

मुझे लगता है कि यह ऐसा करेगा ... या आपकी आवश्यकताओं के अनुरूप इसके बदलाव। । इस मामले में यह अपरकेस अक्षरों की पहली जोड़ी उठाएगा ...

with dataset as 
(
select 'Belo Horizonte , MG - Brazil' as val union all 
select 'São Paulo , SP - Brazil' as val union all 
select 'Ferraz de Vasconcelos , SP - Brazil' 
) 
select Substring(val ,PatIndex('%[A-Z][A-Z] %' COLLATE LATIN1_gENERAL_BIN,val),3) 
from dataset 

आमिर असुविधा के लिए

+0

होप्स डेविड बीट मी टू इट। :) –

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