スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PostgreSQLのlike検索のエスケープ

PostgreSQLでlike検索を行う場合、「%」は複数文字、「_」は1文字の任意な文字にマッチします。
この時、「%」や「_」自体を検索したい場合にはエスケープ文字を使います。
通常「¥」になります。
また、エスケープ文字自体を検索対象にしたい場合エスケープ文字を重ねます。

さて、Webアプリで入力されたテキストの値でlike検索するとします。
上で記述した内容で、入力された値を変換するプログラムをJavaで書いてみます。

public static String makeLikeString(String src) {
// エスケープ文字をエスケープ
src = src.replaceAll("\\\\", "\\\\\\\\");
// %をエスケープ
src = src.replaceAll("%", "\\\\%");
// _をエスケープ
src = src.replaceAll("_", "\\\\_");
return "%" + src + "%";
}

¥の数が多すぎ(笑)
2つでJava文字列として文字として認識されて、さらに2つで正規表現として文字と認識されるため2×2=4になります。それをさらにPostgreSQLとして文字と認識させるためにさらに2倍になるので、8文字並ぶことになります。
スポンサーサイト
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。