0

我正在尝试用 url 过滤掉列中的“非法”字符

我试过

select seourl from products where seourl like '%[^0-9a-z&;/_.?,!%-]%';

但是我有很多看似正常的网址被选为非法网址。所以我尝试了这个以获得更多的调试信息:

declare @p nvarchar(40)='%[^0-9a-z&;/_.?,!%-]%';

select substring(seourl,patindex(@p,seourl),2) s,
patindex(@p,seourl) n,
seourl from products where 
seourl like @p

它表明我在包含“aa”的字符串上得到了命中,如下所示:

AA  1  AA_Batteri__-_Mignon__1,5_v/1_stk
aa  2  Haarboerste

可能是因为排序规则是 Danish_Norwegian_CI_AS,其中 aa 像 å,å ?

4

1 回答 1

1

确实如此。

通过更改排序规则,我不再得到误报:

declare @p nvarchar(40)='%[^0-9a-z&;/_.?,!%-]%';

select seourl from t_produkter where 
CAST(seourl COLLATE SQL_Latin1_General_CP1_CI_AS as varchar(255)) like @p
于 2013-04-03T12:43:24.670 回答