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)
Retur
----------- ----------- ----------- -----------
1 5 5 5
Så det verkar som för varchar
datatypar en efterföljande -
behandlas som en del av en uppsättning medan för nvarchar
det ignoreras (behandlas som ett felaktigt intervall som a
ignoreras också?)
BOL-posten för GILLA
talar inte uttryckligen om hur man använder -
inom []
för att få det att behandlas som en del av en uppsättning men har exemplet
LIKE '[-acdf]'
för att matcha -, a, c, d, or f
så jag antar att det måste vara det första objektet i en uppsättning (dvs. att [^a-zA-Z0-9.~_-]
måste ändras till [^-a-zA-Z0-9.~_]
). Det matchar också resultatet av mina tester ovan.