条件where子句SQLServer

时间:2012-11-15 07:51:54

标签: sql sql-server where

我正在使用SQLServer 2008并遇到了这个问题。我有一个功能,用户可以从菜单中选择多个日期。他们还可以勾选复选框“选择所有日期”。

如果他们选中该复选框,我的查询应仅返回给定日期的结果。因此执行一个WHERE子句。 如果他们没有选中复选框但选择了一个或多个日期;应该使用where子句执行查询。

我有2个参数。 -SelectedDates(例如'2012-11-15','2012-11-15') -AllDates('X'或'')

通常查询看起来像这样:

SELECT * FROM x
WHERE x.date in ([Param.1])

所以我的问题是:如果不需要WHERE子句,我该如何调整查询。

仅供参考:[Param.1]符号用于我正在工作的环境中。

3 个答案:

答案 0 :(得分:2)

简单,使用OR子句,如果选中alldates,它将返回所有日期的数据,如下所示:

SELECT * FROM x
WHERE x.date in ([Param.1]) OR ([Param.2]) = 'X'

如果选中Param.2('X'),它将忽略第一个条件的结果,因为你正在使用OR子句。

答案 1 :(得分:1)

如果控件中存在所有日期,则全部检查也可以生成日期,因此您仍然可以使用WHERE IN('date1',....'dateN')

你也有这个替代

WHERE x.Date IN (.....) OR AllDates = 'X'

答案 2 :(得分:0)

此处AllDates是第二个参数,当用户选中所有日期的复选框

IF(AllDates is not null)
SELECT * FROM x
ELSE
SELECT * FROM x
WHERE x.date in ([Param.1])