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)
Pengembalian
----------- ----------- ----------- -----------
1 5 5 5
Jadi sepertinya untuk varchar
tipe data a trailing -
diperlakukan sebagai bagian dari himpunan sedangkan untuk nvarchar
itu diabaikan (diperlakukan sebagai rentang cacat sebagai a
diabaikan juga?)
Entri BOL untuk LIKE
tidak secara eksplisit berbicara tentang cara menggunakan -
dalam []
untuk membuatnya diperlakukan sebagai bagian dari himpunan tetapi memiliki contoh
LIKE '[-acdf]'
untuk mencocokkan -, a, c, d, or f
jadi saya berasumsi bahwa itu harus menjadi item pertama dalam satu set (yaitu [^a-zA-Z0-9.~_-]
perlu diubah menjadi [^-a-zA-Z0-9.~_]
). Itu juga cocok dengan hasil pengujian saya di atas.