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)
Връщане
----------- ----------- ----------- -----------
1 5 5 5
Така че изглежда, че за varchar
типове данни завършващ -
се третира като част от набор, докато за nvarchar
той се игнорира (третира се като неправилно образуван диапазон като a
също се игнорира?)
Записът в BOL за ХАРЕСВАНЕ
не говори изрично за това как да използвате -
в рамките на []
за да го накарате да бъде третиран като част от набор, но има примера
LIKE '[-acdf]'
за съвпадение на -, a, c, d, or f
така че предполагам, че трябва да е първият елемент в набор (т.е. че [^a-zA-Z0-9.~_-]
трябва да се промени на [^-a-zA-Z0-9.~_]
). Това също съответства на резултата от моето тестване по-горе.