Sql选择查询中的多个日期范围

Sal*_*eem 1 sql t-sql sql-server c#-4.0

我目前正在使用 Sql Server 语言处理 C#,试图设计一个我必须选择季度(Q1、Q2、Q3、Q4)的查询。

我的问题是,假设如果前端用户只选择 Q1,那么我可以将查询设置为 Q1 季度的日期范围,如果用户选择 Q1 和 Q2,那么我仍然可以设置 Q1 的日期范围和Q2 因为它们属于序列日期范围。

但是,如果用户选择 Q1 和 Q3,那么我如何准备日期范围查询(在存储过程中或简单的选择查询中)并为此执行。

我正在尝试这个,但没有用。

where CDate in(cdate between '2015-05-20' and '2015-06-01' 
  and CDate between '2016-06-03' and '2016-06-04'

select * from MM  where @innerstring
Run Code Online (Sandbox Code Playgroud)

我想将@innerstring 作为参数发送到 sql 存储过程,然后准备/执行它。但我不想使用临时表来存储单独日期范围的查询数据,然后合并该结果。因为我也有不同的参数。

谢谢。

Gor*_*off 5

你不需要in. 这应该有效:

where (cdate between '2015-05-20' and '2015-06-01' or
       cdate between '2016-06-03' and '2016-06-04'
      )
Run Code Online (Sandbox Code Playgroud)

请注意between,正如 Aaron Bertrand 在一个有趣的博客中解释的那样,使用日期可能是危险的/居中的。我会去:

where (cdate >= '2015-05-20' and cdate < '2015-06-02' or
       cdate >= '2016-06-03' and cdate < '2016-06-05'
      )
Run Code Online (Sandbox Code Playgroud)

即使cdate有时间组件,这也可以安全地工作。