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)
Retours
----------- ----------- ----------- -----------
1 5 5 5
Il semble donc que pour varchar
types de données un -
final est traité comme faisant partie d'un ensemble alors que pour nvarchar
il est ignoré (traité comme une plage malformée comme a
est également ignoré ?)
L'entrée BOL pour LIKE
ne parle pas explicitement de la façon d'utiliser -
dans []
pour qu'il soit traité comme faisant partie d'un ensemble mais a l'exemple
LIKE '[-acdf]'
pour correspondre à -, a, c, d, or f
donc je suppose qu'il doit être le premier élément d'un ensemble (c'est-à-dire que [^a-zA-Z0-9.~_-]
doit être modifié en [^-a-zA-Z0-9.~_]
). Cela correspond également au résultat de mes tests ci-dessus.