SQLのlike演算子でエスケープが必要な文字

まとめると以下のようになると思います。

Oracle % _ %(全角)_(全角)
DB2 % _ %(全角)_(全角)
MS SQL Server % _ [
MySQL % _
PostgreSQL % _

注意点は以下のとおり。

  • DB2Oracleは、「%」「_」(全角)もワイルドカードとして解釈する
  • SQL Serverは、[a-z]のような正規表現的な記述を解釈する
  • 当然、ワイルドカード的な機能を持たせたい「%」や「_」等はエスケープしない
  • 全データベース共通の話として、エスケープ文字自体もエスケープする必要がある(MySQL、Postgresでは「\」がデフォルトのエスケープ文字)
  • likeのエスケープをした後に、Prepared Statementで値をSQLにバインドする

(関連)2008-07-10 - T.Teradaの日記