1

SQL Server 2005を使用しています。指定されたパラメーターと同じ文字列を持つ、テーブルからすべての行を選択する必要があります。

SELECT * FROM mytable WHERE title LIKE @param;

唯一の問題は、タイトル列に、比較対象の@paramですでに「-」に置き換えられている特殊文字が含まれている可能性があることです。

[az] [AZ] [0-9] [-]以外の@paramの文字はすべて「-」に置き換えられたため、これを元に戻す方法はありません。(値はSEOに適したURLから取得されます)

可能なタイトル値の例とそれらがどのように見えるべきか:

"Adobe Acrobat" -> "Adobe-Acrobat"  
"A+® Certification" -> "A-Certification"

文字のホワイトリストメカニズムが必要なため、SQL REPLACE()関数を使用できません。タイトル列に、予測できない非常に特殊な文字が含まれている可能性があります。

これには正規表現が最適です。

2日間検索しましたが、T-SQLに実装するための簡単で効率的な方法を見つけることができませんでした。

すべての行を取得してクライアントコードでフィルタリングを行うことはできましたが、それは私にとってあまり良い解決策ではないようです。

助言がありますか?

4

2 に答える 2

3

SQL Server 2005以降を使用している場合は、SQL CLR関数を使用して、SQLServer内で正規表現を効率的に使用できます。

ここから、RegExSQLCLRのソースコードをダウンロードできます。

于 2010-12-26T15:17:42.047 に答える
1

基本的-に、任意の文字のワイルドカードとして(ダッシュ)を使用しています。SQLのlikeステートメントの場合、任意の文字のワイルドカードは_(アンダースコア)です。したがって、ダッシュをアンダースコアに置き換えてみることができます。例えば:

where 'A+® Certification' like replace('A---Certification','-','_')

小さな違いの1つは、アンダースコアはA-Z0-9と一致しますが、ダッシュは一致しないことです。

于 2010-12-26T17:20:54.430 に答える