SELECT PATINDEX('%[^a-]%', N'aaa-def' COLLATE Latin1_General_BIN),
PATINDEX('%[^-a]%', N'aaa-def' COLLATE Latin1_General_BIN),
PATINDEX('%[^a-]%', 'aaa-def' COLLATE Latin1_General_BIN),
PATINDEX('%[^-a]%', 'aaa-def' COLLATE Latin1_General_BIN)
Rückgabe
----------- ----------- ----------- -----------
1 5 5 5
So scheint es für varchar
Datentypen ein nachgestellter -
wird als Teil einer Menge behandelt, wohingegen für nvarchar
er wird ignoriert (als falsch formatierter Bereich als a
behandelt wird auch ignoriert?)
Der BOL-Eintrag für LIKE
spricht nicht explizit über die Verwendung von -
innerhalb von []
um es als Teil einer Menge zu behandeln, hat aber das Beispiel
LIKE '[-acdf]'
um mit -, a, c, d, or f
übereinzustimmen also gehe ich davon aus, dass es das erste Element in einem Satz sein muss (d.h. dass [^a-zA-Z0-9.~_-]
muss in [^-a-zA-Z0-9.~_]
geändert werden ). Das stimmt auch mit dem Ergebnis meiner obigen Tests überein.