使用可选参数运行 LIKE 查询 - SQLite3



我正在创建一个使用better-sqlite3的电子应用程序,我想知道,一般来说,是否有办法运行使用带有可选参数LIKE的查询?假设有一个表人,其中包含"名字"和"姓氏"列。用户可以按以下方式进行搜索:

仅名字,在这种情况下,查询将是:

SELECT * from people WHERE firstname LIKE %userEnteredFname%

仅姓氏,在这种情况下,查询将是:

SELECT * from people WHERE lastname LIKE %userEnteredLname%

或两个字段:

SELECT * from people WHERE firstname LIKE %userEnteredFname% AND lastname LIKE %userEnterLname%

仅供参考,有一种方法可以使用可选参数进行INSERT

const stmt = db.prepare('INSERT INTO cats (name, age) VALUES (?, ?)');
const info = stmt.run('Joey'); //age would be null

查询取决于输入的搜索参数。果然,您可以为少量输入字段准备语句,但我有大约 7 个,那里可以有很多组合。

运算符LIKE在其任何操作数NULL时返回NULL
因此,对于所有列,如果传递的值NULL,则使用COALESCE()将返回1(=TRUE):

SELECT * 
FROM people 
WHERE COALESCE(firstname LIKE '%' || ? || '%', 1) 
AND COALESCE(lastname LIKE '%' || ? || '%', 1)

?占位符代表将传递给查询的参数。

只要userEnterLname是空字符串,

SELECT * from people WHERE firstname LIKE %userEnteredFname% AND lastname LIKE %userEnterLname%

SELECT * from people WHERE lastname LIKE %userEnteredLname%

因此,除非你想搜索它们,否则只需将额外的变量留空。

最新更新