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)
Returnerer
----------- ----------- ----------- -----------
1 5 5 5
Så det ser ud til, at for varchar datatyper en efterfølgende - behandles som værende en del af et sæt, hvorimod for nvarchar det ignoreres (behandles som et forkert udformet område som a ignoreres også?)
BOL-posten for LIKE
taler ikke eksplicit om, hvordan man bruger - inden for [] for at få det til at blive behandlet som en del af et sæt, men har eksemplet
LIKE '[-acdf]'
for at matche -, a, c, d, or f så jeg antager, at det skal være det første element i et sæt (dvs. at [^a-zA-Z0-9.~_-] skal ændres til [^-a-zA-Z0-9.~_] ). Det matcher også resultatet af min test ovenfor.