SQL likeパターンマッチング エスケープ

http://www.postgresql.jp/document/pg721doc/user/functions-matching.html

リテラルのアンダースコアやパーセント記号を他の文字のマッチングに使用するのではなくそのものをマッチさせたい場合には、 pattern の中のそれぞれのアンダースコアとパーセント記号はエスケープ文字でエスケープされなければなりません。デフォルトのエスケープ文字は逆スラッシュですが、ESCAPE 句で他の文字を指定することがでいます。エスケープ文字そのものをマッチさせるにはエスケープ文字をふたつ書きます。

リテラル文字列において逆スラッシュには始めから特別な意味合いがあるので逆スラッシュを含んだパターン定数を記述するときは問い合わせの中で 2 つの逆スラッシュを記述する必要があることに注意してください。 ESCAPE 句で他のエスケープ文字を選択すればこのような状況を回避でき、逆スラッシュは LIKE 式にとり特殊な文字ではなくなります。(とはいっても、リテラル文字列パーサにとっては依然として特殊文字なので、やはり 2 つは必要です。)

'\'
select * from userid where playername like '\\\\';
'%'
select * from userid where playername like '\\%';

PreparedStatementの場合は'\のエスケープは不要

%を\でエスケープして\%にすれば。prepareStatementで\\%にしてくれう

stmt = conn.prepareStatement("SELECT userid, playername FROM userid WHERE playername LIKE ? LIMIT ?");
stmt.setString(1, "%"+escape(playerName, "%_", '\\')+"%");