node.js - 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个
我有点努力将 % 考虑在内,因此它不会使查询崩溃。在尝试上述方法和其中的变量之后,就没有想法了。谢谢你的帮助。
解决方案
这已经在这里得到了回答: Go postgresql LIKE query
在这种特殊情况下:
response = await pool.query(`SELECT * FROM vehicle WHERE module_imei LIKE '%'||$1||'%' OR custom_id LIKE '%'||$1||'%'`, [search]);
这会奏效。
推荐阅读
- haskell - TimeOfDay 的任意实例
- javascript - Firebase signInWithPopup() 函数,弹出 google 登录窗口但弹出窗口不显示任何 google 帐户
- java - java - 如何在Java中使用JDBC从MySQL中检索数学方程?
- javascript - 使用 vars / props 将 vue 集成到模板中
- infinite-scroll - 如何在 ReactDataGrid 中添加无限滚动功能?反应
- c# - 在 SQL 中,如何从 2 个相关表中仅删除 1 个表
- python - 需要帮助匹配嵌套列表或二维列表的两个列表
- html - 如何在此特定标题上居中对齐徽标
- linux - 家庭网络外无法访问Nginx
- android - 呼叫意图过滤器