2012-01-04 67 views
2

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

不太清楚如何解决这个问题,但我已经有一些代码。我似乎无法完成它。我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字符串未发现艾滋病然后我不需要与p.disease1条件限制查询。 Disease1是数据类型位,因此该列中只有1或0。我怎么能在ELSE中同时指定0和1,或者让它一起忽略Disease1?我还有另外15个BIT字段,如果它们存在于inpDisease中,则必须进行检查,如果它们不存在,则将其忽略。

任何想法什么是最好的方式来完成这可能是?我不想结束大量使用条件逻辑的SELECT,只是为了省略查询中的1个字段或1个字段。

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

+0

数据库人员可能更有可能称之为“有条件的地方”。仅供参考。 – tnktnk 2012-01-04 21:05:05

回答

6

比较列其自身的价值,如果你不希望使用标准:

p.disease1 = CASE WHEN @inpDisease LIKE '%AIDS%' THEN 1 ELSE p.disease1 END 
+0

+1 - 你今天在一起 – Lamak 2012-01-04 21:05:51

+0

安倍...你当然可以..该死的是我的一个DUH时刻...谢谢我会试试 – Encryption 2012-01-04 21:08:03

+1

@AbeMiessler - 是的,你可以 – Lamak 2012-01-04 21:08:57

2

​​

如果@inpDisease就像%艾滋病%,然后p.disease必须是1
如果@inpDisease不像%艾滋%,那么p.disease被忽略