我正在从前端获取数组以根据SQL查询中的内容执行过滤器。
我想在数组上应用LIKE
过滤器。如何在LIKE
函数内部添加数组?
我将Angular和Html用作前端,将Node作为后端。
从前端传入的数组:
[ "Sports", "Life", "Relationship", ...]
SQL查询是:
SELECT *
FROM Skills
WHERE Description LIKE ('%Sports%')
SELECT *
FROM Skills
WHERE Description LIKE ('%Life%')
SELECT *
FROM Skills
WHERE Description LIKE ('%Relationship%')
但是我从前端得到一个数组-如何为此创建查询?
答案 0 :(得分:1)
答案 1 :(得分:0)
例如,对于SQL Server 2016+和STRING_SPLIT()
:
DECLARE @Str NVARCHAR(100) = N'mast;mode'
SELECT name FROM sys.databases sd
INNER JOIN STRING_SPLIT(@Str, N';') val ON sd.name LIKE N'%' + val.value + N'%'
-- returns:
name
------
master
model
值得一提的是,必须严格控制输入数据,因为这样会导致SQL注入攻击
作为另一种更安全,更简单的方法:可以通过以下方式在应用程序端生成SQL:
Select * from Skills
WHERE (
Description Like '%Sports%'
OR Description Like '%Life%'
OR Description Like '%Life%'
)
答案 2 :(得分:0)
在map()
数组上进行简单的words
调用将允许您生成相应的查询,然后可以执行这些查询(有或没有先将它们连接成一个字符串)。
演示:
var words = ["Sports", "Life", "Relationship"];
var template = "Select * From Skills Where Description Like ('%{0}%')";
var queries = words.map(word => template.replace('{0}', word));
var combinedQuery = queries.join("\r\n");
console.log(queries);
console.log(combinedQuery);