我正在使用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]符号用于我正在工作的环境中。
答案 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])