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