我正在尝试检查我的数据库中是否存在其中一个涉及的人名(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%'
答案 0 :(得分: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;
答案 1 :(得分:0)
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