NodeでSQLを発行する際に、LIKE文でハマった話について説明する。

NodeでSQLを発行す際にLIKE文を使いたい場合、一筋縄ではいかなかったので、共有する。

 

 

通常Nodeにて、SQLを発行する際には、

  const query = 'SELECT id FROM TEST_TABLE WHERE A =  $1';
  const param = [arg.a];

  db.getOne(query, param, function (err, row) {
    if (err) {
      console.log("DB_ERROR: " + err);
      return;
    }
      callback(row);
  });

 

上記のような感じで、SQLを発行するのだが、(今回はプレースホルダを用いたSQL)

 

 

このとき、LIKE文を使おうとすると

WHERE message LIKE \'%\' || $2 || \'%\'

 const query = 'SELECT id FROM TEST_TABLE WHERE A LIKE \'%\' || $1 || \'%\''; 
 const param = [arg.a];
 
 db.getOne(query, param, function (err, row) {
    if (err) {
      console.log("DB_ERROR: " + err);
      return;
    }
      callback(row);
  });

 

上記のようにシングルクォート( ‘ )でワイルドカード(%)部分をエスケープしなければならない。

 

また固定文字とワイルドカード(%)との間には文字列結合( OracleやPostgresでは||) を用いて文字結合する必要がある。

 

 

これは知っておけばなんてことないことだが、

知らないと、ちょっと手間取ることになるので覚えておく。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください