我有一个软件应用程序,如果在输入参数中找到特定字符串,我需要根据特定条件查询数据库。但是,如果找不到特定的字符串,那么我不想包含限制条件。
不太确定如何处理这个但我已经有了一些代码。我似乎无法完成它。我的where子句如下所示:
WHERE p.country = @country AND
p.[state] = @state AND
p.last_update BETWEEN @from AND @to AND
f.facility_id = @facid AND
p.sex = @gender AND
p.disease1 = CASE WHEN @inpDisease LIKE '%AIDS%' THEN 1 ELSE --?? Here is where it gets tricky
如果在@inpDisease字符串中找不到AIDS,则我不需要使用p.disease1条件限制查询。 Disease1是数据类型位,因此该列中只存在1或0。我如何在ELSE中指定0和1,或者让它一起忽略Disease1?我还有15个BIT字段,如果它们存在于inpDisease中则需要检查,否则如果它们不存在则被忽略。
任何想法最好的方法是什么?我不想最终使用条件逻辑大量的SELECT来省略此处的1个字段或查询中的1个字段。
我似乎无法想出一个好主意来解决这个问题,所以任何帮助都表示赞赏! 感谢
答案 0 :(得分:6)
如果您不想使用该标准,请将列与其自身值进行比较:
p.disease1 = CASE WHEN @inpDisease LIKE '%AIDS%' THEN 1 ELSE p.disease1 END
答案 1 :(得分:2)
@inpDisease NOT LIKE '%AIDS%' OR p.disease1 = 1
如果@inpDisease是LIKE%AIDS%,那么p.disease必须是1
如果@inpDisease不像%AIDS%,则忽略p.disease