2010-11-18 2 views
7

Verwendung PATINDEX und Groß- und Kleinschreibung Sortierung für Großbuchstaben in einer Zeichenfolge zu suchen I bemerkte dies nicht wurde, um das gewünschte Ergebnis liefert:Bereich Wildcard Musteranpassung Verhalten mit fallempfindlichen Sortierungen

-- returns 1 
SELECT PATINDEX('%[A-Z]%' 
        , 'abCde' COLLATE SQL_Latin1_General_Cp1_CS_AS); 

jedoch Angabe jedes Buchstaben, AZ, tut:

-- returns 3 
SELECT PATINDEX('%[ABCDEFGHIJKLMNOPQRSTUVWXYZ]%' 
        , 'abCde' COLLATE SQL_Latin1_General_Cp1_CS_AS); 

Ist mein Verständnis der Verwendung eines Bereichs im ersten Fall falsch? Warum ist das Verhalten so?

+0

Dank hierfür benötigte ich Reihen extrahieren mit Großbuchstaben beginnen nur: PATINDEX ('[ABCDEFGHIJKLMNOPQRSTUVWXYZ]%', [NAME] COLLATE SQL_Latin1_General_CP1_CS_AS) = 1 –

Antwort

6

Leider sind die Bereich Operatoren ein bisschen lustig. Der Bereich der Buchstaben von A-Z ist:

AbBcCdDeE...yYzZ 

Das heißt, Kleinbuchstaben stehen unmittelbar vor ihrem Großbuchstabe. Das macht auch Spaß, denn wenn Sie mit Groß- und Kleinbuchstaben umgehen wollen, schließt der Bereich A-Z in Groß- und Kleinschreibung die Kleinschreibung ein.


ich die oben sagen sollte, wie in Bezug auf die Reichweite aus erweitert, basiert auf den Sortierungen ich mit im Allgemeinen arbeiten. Wie der Bereich tatsächlich erweitert wird, ist collation dependent. Wenn Sie eine Sortierung finden, in der beispielsweise alle Großbuchstaben vor allen Kleinbuchstaben auftreten, dann würde der Bereich wie erwartet funktionieren. (? Vielleicht eine der binären Sortierungen)

+1

Spot on @Damien_The_Believer ! Der Wechsel zu Latin1_General_100_BIN2 ergibt das gleiche Ergebnis, 3, für beide Snippets in meiner Frage oben. Danke für die Klarstellung –