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.