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.