【问题标题】:tsql Pattern [^a-z] finds aatsql 模式 [^a-z] 找到 aa
【发布时间】:2013-04-03 12:39:47
【问题描述】:

我正在尝试用 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 像 å,å ?

【问题讨论】:

    标签: tsql design-patterns sql-like


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-25
      • 2016-12-07
      • 1970-01-01
      • 1970-01-01
      • 2022-11-18
      • 2013-03-05
      相关资源
      最近更新 更多