2012-06-14 20 views
5

ich tun dies in SQL ServerWie nur Großbuchstaben in Wort durch in SQL Server-Abfrage

Ich habe Daten wie

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

Ich muss wählen zwei Buchstaben-Wort zu finden, wie die Spiele das Muster

Space Letter Letter 

ich habe schon versucht, diese

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

Aber ich brauche nur Großbuchstaben zu prüfen, für diese (dh) Ausgabe

MG SP SP SP 

sein und nicht de enthalten, wie in der letzten Zeile des Beispiels Ferraz de Vasconcelos , SP - Brazil

Klare Sicht auf das Problem gefunden

ZB: Vaischnava st Northwind GH - Ergebnis hat GH

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

entschuldigen uns für die Unannehmlichkeiten .. –

+1

Welche Kollatierungssequenz wird die Spalte? – JAQFrost

+0

Kollation verwenden wir die generische- Es ist nicht case sensitive (Englisch) –

Antwort

0

S sein Elect 2 leters hinter dem Komma:

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

oder mit -:

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

Finale, nicht elegant, Lösung:

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

Es zwei Großbuchstaben wählt.

+0

Ich habe ein Beispiel gegeben, aber alle Werte werden nicht haben, –

+0

@ArunKumar haben sie die '-' Afterwords? –

+0

Dank af Ihre Antworten passt für diese aber nicht für alle meine Daten bcoz manchmal hat es vielleicht nicht das letzte Wort (-brazil) und manchmal wird es nicht behüten, auch –

-1

Sortierung ist wichtig. Sie müssen Collate zu Ihrer Anfrage hinzuzufügen, wie zum Beispiel:

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; 

Sie können einen Unterschied Sortierungs benötigen - Ihre aktuelle ist klar Groß- und Kleinschreibung. Sie können Ihre aktuelle Kollatierung finden und Latin1_General_CS_AS_KS_WS durch die, die Sie benötigen, ersetzen und die CI durch CS ersetzen, um die Case Senstive-Version Ihrer aktuellen Kollatierung zu erhalten.

See: http://msdn.microsoft.com/en-us/library/ms184391.aspx

+0

Statt Downvoting, ein Kommentar wäre nützlich. Wer will mich aufklären, was falsch ist? –

0

Könnten Sie dies nur versuchen:

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

Example

+0

Dies funktioniert in diesem Fall nicht Av. Brigg. Faria Lima, 1355 4º undar São Paulo, SP 01452-002 Brasilien –

+0

Wird es immer ein '[COMMA]' und '[SPACE]' vor den zwei Zeichen geben? Geht es um Benutzereingaben oder generieren Sie die Werte? – bendataclear

+0

Der Fall ist 1) Immer gibt es einen Raum zwischen zwei Charaters, aber Komma kann nicht sicher sein, wie es könnte oder möglicherweise kein Komma –

3

Try this: Sie müssen sowohl die Spalte sortieren und die Großbuchstaben angeben. Der reguläre Ausdruck [A-Z] unterscheidet nicht zwischen Groß- und Kleinschreibung, selbst wenn Sie eine Sortierreihenfolge angeben.

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

Ich denke, das wird es tun ... oder eine Variation davon, um Ihre Bedürfnisse zu erfüllen. . In diesem Fall wird es das erste Paar von Großbuchstaben auswählen ...

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 

Aamer

+0

Whoops David Beat mich dazu. :) –

Verwandte Themen