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)
Trả lại
----------- ----------- ----------- -----------
1 5 5 5
Vì vậy, có vẻ như đối với varchar
kiểu dữ liệu theo sau -
được coi như là một phần của tập hợp trong khi đối với nvarchar
nó bị bỏ qua (được coi là một dải ô không đúng định dạng là a
cũng bị bỏ qua?)
Mục nhập BOL cho LIKE
không nói rõ ràng về cách sử dụng -
trong []
để làm cho nó được coi là một phần của tập hợp nhưng có ví dụ
LIKE '[-acdf]'
để khớp với -, a, c, d, or f
vì vậy tôi giả sử rằng nó cần phải là mục đầu tiên trong một tập hợp (tức là [^a-zA-Z0-9.~_-]
cần được thay đổi thành [^-a-zA-Z0-9.~_]
). Điều đó cũng khớp với kết quả thử nghiệm của tôi ở trên.