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 存储过程,然后准备/执行它。但我不想使用临时表来存储单独日期范围的查询数据,然后合并该结果。因为我也有不同的参数。
谢谢。
你不需要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有时间组件,这也可以安全地工作。
| 归档时间: |
|
| 查看次数: |
20020 次 |
| 最近记录: |