SQL 查询使用多个条件和 LIKE 通配符
Posted
技术标签:
【中文标题】SQL 查询使用多个条件和 LIKE 通配符【英文标题】:SQL Query use multiple criteria and LIKE wildcard 【发布时间】:2014-04-14 18:32:54 【问题描述】:我正在尝试检查我的数据库中是否存在相关人员姓名之一(1、2、3 或 4)。我尝试了以下查询,但它没有按我的意愿工作。
SELECT *
FROM db.cases
WHERE (inv_person_name_1 OR inv_person_name_2 OR inv_person_name_3 OR inv_person_name_4) LIKE '%something%'
我也不能使用类似的东西
SELECT *
FROM db.cases
WHERE inv_person_name_1 LIKE '%something%'
OR inv_person_name_2 LIKE '%something%'
OR inv_person_name_3 LIKE '%something%'
OR inv_person_name_4 LIKE '%something%'
因为它不符合我的程序需要。我只需要一个 LIKE '%something%'
【问题讨论】:
【参考方案1】:假设您使用的是 C#(当前已标记),您需要使用 SqlParameters 格式化查询:
SELECT * FROM db.cases
WHERE inv_person_name_1 LIKE 0
OR inv_person_name_2 LIKE 0
OR inv_person_name_3 LIKE 0
OR inv_person_name_4 LIKE 0;
或:
SELECT * FROM db.cases
WHERE inv_person_name_1 LIKE @name
OR inv_person_name_2 LIKE @name
OR inv_person_name_3 LIKE @name
OR inv_person_name_4 LIKE @name;
在这种情况下你需要做cmd.BindByName = true;
(见better way of using a single parameter multiple times in c#)
另一个丑陋的替代方案,但如果您的 LIKE 将始终采用%something%
格式(即,前后通配符),您可以这样连接名称:
SELECT * FROM db.cases
WHERE (inv_person_name_1 || '+' || inv_person_name_2 || '+' || inv_person_name_3 || '+' || inv_person_name_4) LIKE @name;
或
SELECT * FROM db.cases
WHERE CONCAT_WS('+', inv_person_name_1, inv_person_name_2, inv_person_name_3, inv_person_name_4) LIKE @name;
【讨论】:
首先,感谢您的帮助。你写的最后一个查询似乎符合我的需要,但它不能正常工作。它只检查与@name 匹配的inv_person_name_4。解决此问题的其他想法? @Michael_Panayiotou 你的意思是串联吗?也许试试CONCAT_WS('+',inv_person_name_1,inv_person_name_2,inv_person_name_3,inv_person_name_4)
(doc)
请确保您使用的分隔符足够独特,不能出现在您的姓名中【参考方案2】:
SELECT * FROM db..cases WHERE inv_person_name IN (1, 2, 3, 4) -- for integer types
SELECT * FROM db..cases WHERE inv_person_name IN ('1', '2', '3', '4') -- for varchar types
【讨论】:
AND inv_person_name_4 LIKE '%something%' 这似乎不能解决我的问题。我正在尝试搜索我的数据库中可能位于 inv_person_1 或 inv_person_2 或 inv_person_3 或 inv_person_4 列中的相关人员。我正在尝试执行类似于描述中的第一个查询的操作(仅使用一次 Like)以上是关于SQL 查询使用多个条件和 LIKE 通配符的主要内容,如果未能解决你的问题,请参考以下文章