0

URL のある列で「不正な」文字を除外しようとしています

私は試した

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

しかし、違法として選択された一見問題のない URL がたくさんありました。だから私はこれを試して、より多くのデバッグ情報を取得しました:

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 に答える