NodeでSQLを発行する際に、LIKE文でハマった
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では||) を用いて文字結合する必要がある。
これは知っておけばなんてことないことだが、
知らないと、ちょっと手間取ることになるので覚えておく。