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)
Resi
----------- ----------- ----------- -----------
1 5 5 5
Quindi sembra che per varchar
tipi di dati un -
finale viene considerato come parte di un set mentre per nvarchar
viene ignorato (trattato come un intervallo non corretto come a
viene ignorato anche lui?)
La voce BOL per MI PIACE
non parla esplicitamente di come usare -
all'interno di []
per farlo essere trattato come parte di un set ma ha l'esempio
LIKE '[-acdf]'
per abbinare -, a, c, d, or f
quindi presumo che debba essere il primo elemento di un set (cioè quel [^a-zA-Z0-9.~_-]
deve essere modificato in [^-a-zA-Z0-9.~_]
). Ciò corrisponde anche al risultato dei miei test di cui sopra.