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)
Devoluções
----------- ----------- ----------- -----------
1 5 5 5
Então parece que para
varchar
tipos de dados um -
à direita é tratado como parte de um conjunto enquanto para nvarchar
ele é ignorado (tratado como um intervalo malformado como a
é ignorado também?) A entrada BOL para LIKE não fala explicitamente sobre como usar
-
dentro de []
para que seja tratado como parte de um conjunto, mas tem o exemplo LIKE '[-acdf]'
para corresponder a
-, a, c, d, or f
então eu suponho que ele precisa ser o primeiro item em um conjunto (ou seja, que [^a-zA-Z0-9.~_-]
precisa ser alterado para [^-a-zA-Z0-9.~_]
). Isso também corresponde ao resultado do meu teste acima.