首页 > 解决方案 > Postgres Node 搜索查询使用 LIKE,如何设置 %

问题描述

我在使用 Postgresql 和 Node.js 时遇到了一个奇怪的问题。我想在我的查询中使用 LIKE 以及在搜索词的开头和结尾处使用 % 。我在普通 SQL 中使用它没有问题:

这有效:

SELECT * FROM vehicle WHERE module_imei LIKE '%searchterm%' OR custom_id LIKE '%searchterm%'

但是,在 Node 中使用它有点挑战。我还没有成功解决它:这不起作用:

  getVehiclesSearch: async function({ search }) {
    let response;
    try {
      response = await pool.query(`SELECT * FROM vehicle WHERE module_imei LIKE %$1% OR custom_id LIKE %$1%`, [search]);
      if(response) return response.rows;
    } catch(error) {
      // handle error
      console.error(error);
      // do not throw anything
    }
  },

执行上述操作将产生:“%”处或附近的语法错误

SELECT * FROM vehicle WHERE module_imei LIKE '%${$1}%' OR custom_id LIKE '%${$1}%

执行上述操作将产生:$1 未定义

SELECT * FROM vehicle WHERE module_imei LIKE '%$1%' OR custom_id LIKE '%$1%'

做上面会产生:bind message提供1个参数,但是prepared statement“”需要0个

我有点努力将 % 考虑在内,因此它不会使查询崩溃。在尝试上述方法和其中的变量之后,就没有想法了。谢谢你的帮助。

标签: node.jspostgresql

解决方案


这已经在这里得到了回答: Go postgresql LIKE query

在这种特殊情况下:

      response = await pool.query(`SELECT * FROM vehicle WHERE module_imei LIKE '%'||$1||'%' OR custom_id LIKE '%'||$1||'%'`, [search]);

这会奏效。


推荐阅读