2017-02-16 115 views
1

我正在尝试创建一个报告,该报告给出了发生在特定日期的周,月和季度中的事件的编号。
我已经能够这样做了几个星期和几个月,但与季度有问题。我希望在特定年份的季度中获得结果,例如2016年的例子。特定年份的sql日期四月份

例如

declare @date date set @date = '2016/02/30'  

select case_id, event_date 
from #total 
WHERE datepart(quarter, event_DATE) = datepart(quarter, @date) 
order by 2 
当我使用此代码它给我造成的不仅是2016年,但也为2015,2014(往年)相同的四

case_id   event_date 
1234  1986-02-06 
5567  2014-01-04 
3456  2015-03-11  
6378  2016-02-23  
4789  2016-02-06 
6782  2016-01-04 
2346  2016-03-11  
9098  2016-02-23 

我想要的只是2016年而不是前几年。

case_id   event_date 
4789  2016-02-06 
6782  2016-01-04 
2346  2016-03-11  
9098  2016-02-23 
+2

你需要匹配'DATEPART(年,...) '以及。 Q1等出现在每年。 – Richard

+0

尽管总的来说你想[在'where子句中]避免函数(https://www.mssqltips.com/sqlservertutorial/3204/avoid-using-functions-in-where-clause/)。建立一个日期表并将其加入到该表中。 – iamdave

+0

感谢您的修改。 –

回答

2

你可以尝试将全年的条件:

[...] AND datepart(year, event_DATE) = datepart(year, @date) 

你的查询会看起来像

SELECT case_id, event_date 
FROM #total 
WHERE datepart(quarter, event_DATE) = datepart(quarter, @date) 
AND datepart(year, event_DATE) = datepart(year, @date) 
ORDER BY 2 
0
declare @date date set @date = '2016/02/30'  

select case_id, event_date 
from #total 
WHERE datepart(quarter, event_DATE) = datepart(quarter, @date) 
AND datepart(YYYY,event_DATE) = '2016' 
order by 2 
+0

非常感谢你的工作! –

+0

使用@nbouchet建议的动态代码,它比我在那里做的更好。 – Leonidas199x