复杂的SQL WHERE子句问题

时间:2012-01-04 20:59:07

标签: sql sql-server

我有一个软件应用程序,如果在输入参数中找到特定字符串,我需要根据特定条件查询数据库。但是,如果找不到特定的字符串,那么我不想包含限制条件。

不太确定如何处理这个但我已经有了一些代码。我似乎无法完成它。我的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个字段。

我似乎无法想出一个好主意来解决这个问题,所以任何帮助都表示赞赏! 感谢

2 个答案:

答案 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