LIKE演算子のエスケープと正規表現
.NETのプログラムからSQLを発行する場合、LIKE演算子のエスケープ処理をしてやる必要がありますが。
これを正規表現でやろうとするんですが、LIKE演算子内の特殊文字のエスケープと、正規表現のエスケープとでややこしいことに。
ググっても、そのものズバリの回答がなかなか見つからないので、試行錯誤(´Д`)
SQL Serverについてはこんな風にやっていたんですが。
string data = ...; data = Regex.Replace( data, "([%\\*\\]\\[])", "[$1]" ).Replace( "'", "''" ); string sql = String.Format( "SELECT id, data FROM test WHERE data LIKE '%{0}%'", data );
で、Oracleについてはこんなんで良いのかしら?
string data = ...; data = Regex.Replace( data, @"([\\%_%_])", "\\$1" ).Replace( "'", "''" ); string sql = String.Format( @"SELECT id, data FROM test WHERE data LIKE '%{0}%' ESCAPE '\'", data );
「%」と「_」が大文字でも特殊文字として扱われるということなので、大文字も対象。
正規表現は苦手なのであまり自信が無いです(´ω`)