我有一个报告,用户可以在这三个中选择一个过滤值,并且可以在点击提交按钮之前传递日期范围(“从日期”和“到日期”):
我想针对所选过滤器值在 myTable 上触发选择查询。
如果用户选择第一个值(1),查询应该给出dtEventDate介于输入日期范围之间的所有记录。
如果用户选择第二个值(2),查询应该给出dtGuestCreatedDate介于输入日期范围之间的所有记录。
同样,如果用户选择第三个值(3),查询应该给出dtGuestCreatedDate大于'To Date'的所有记录。
我的查询就像,
Select * from myTable
where
if '#filterValue#'='Events within Date Range'
then myTable.dtEventDate between '' and ''
else if '#filterValue#'='New Guests withing Date Range'
then myTable.dtGuestCreatedDate between '' and ''
else myTable.dtGuestCreatedDate > ''
我不知道如何写这个条件。
到目前为止,我有这个可以给我日期范围内的活动:
select * from myTable
where myTable.dtEventDate between
case when '#filterValue#'='Events Within Date Range' then '10/01/2016' end
and '11/30/2016'
但我需要在一个where子句中检查所有三个过滤器值。
有人可以帮忙吗?
答案 0 :(得分:1)
您可以根据您提供的示例执行此类操作:
Select * from myTable
where
('#filterValue#'='Events within Date Range' AND myTable.dtEventDate between '' and '')
OR
('#filterValue#'='New Guests withing Date Range' AND myTable.dtGuestCreatedDate between '' and '')
OR
('#filterValue#'='New Guests Beyond Date Range' AND myTable.dtGuestCreatedDate > '')
答案 1 :(得分:0)
select * from myTable
where case @filtervalue
when 'Events within daterange' then myTable.dtEventDate between ...
when 'New Guests within daterange' then ...
...
end
另外,我强烈建议您使用参数化查询来避免SQL注入攻击。假设您的环境允许这样做。