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)
Zwroty
----------- ----------- ----------- -----------
1 5 5 5
Wygląda więc na to, że dla varchar
typy danych a kończący -
jest traktowany jako część zestawu, podczas gdy dla nvarchar
jest ignorowany (traktowany jako zniekształcony zakres jako a
też jest ignorowany?)
Wpis BOL dla LIKE
nie mówi wprost o tym, jak używać -
w []
aby był traktowany jako część zestawu, ale ma przykład
LIKE '[-acdf]'
aby dopasować -, a, c, d, or f
więc zakładam, że musi to być pierwsza pozycja w zestawie (tzn. że [^a-zA-Z0-9.~_-]
należy zmienić na [^-a-zA-Z0-9.~_]
). To również zgadza się z wynikami moich powyższych testów.