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.