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)
Retourneren
----------- ----------- ----------- -----------
1 5 5 5
Het lijkt er dus op dat voor varchar
datatypes a trailing -
wordt behandeld als onderdeel van een set, terwijl voor nvarchar
het wordt genegeerd (behandeld als een verkeerd opgemaakt bereik als a
wordt ook genegeerd?)
Het BOL-item voor LIKE
spreekt niet expliciet over het gebruik van -
binnen []
om het als onderdeel van een set te laten behandelen, maar heeft wel het voorbeeld
LIKE '[-acdf]'
overeenkomen met -, a, c, d, or f
dus ik neem aan dat dit het eerste item in een set moet zijn (d.w.z. dat [^a-zA-Z0-9.~_-]
moet worden gewijzigd in [^-a-zA-Z0-9.~_]
). Dat komt ook overeen met het resultaat van mijn testen hierboven.