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 通配符的主要内容,如果未能解决你的问题,请参考以下文章

Oracle条件查询,分页查询

sql总结

在SQL Server中用好模糊查询指令LIKE

SQL利用通配符进行模式查询

S1/C#语言和数据库技术基础/10-模糊查询和聚合函数

mssql中一个简单的模糊查询语句怎么写请教大侠们