【发布时间】:2014-08-06 23:59:40
【问题描述】:
我有一个汇总数据表,其中存储每日计数、每月计数和每年计数的数据。
“rollup_type”指定它是每日(1)/每月(2)/每年数据(3)。对于年度记录,monthl/daily 均为空。对于月度记录,daily 为空。
我正在尝试根据输入的开始日期和结束日期进行简单的 SELECT,但没有成功。这是我尝试过的,但无法正常工作。
declare @start_date datetime = '2013-02-01'
declare @enddate datetime = '2014-01-12'
select * from olr_rollup_data rd
where ( rd.Year > DATEPART(YYYY, @start_date) or ( rd.Year = DATEPART(YYYY, @start_date) and ( (rd.Month > DATEPART(MM, @start_date) and rd.day is null) or (rd.MONTH = DATEPART(MM, @start_date) and rd.day >= DATEPART(DD, @start_date) ))))
and ( rd.Year < DATEPART(YYYY, @enddate) or ( rd.Year = DATEPART(YYYY, @enddate) and ( (rd.Month < DATEPART(MM, @enddate) and rd.day is null) or ( rd.MONTH = DATEPART(MM, @enddate) and rd.Day <= DATEPART(DD, @enddate) ))))
基本上,一个通用的选择语句将使用来自输入日期的每日、每月和每年数据的组合。当输入日期覆盖整月时,它应该选择天加整月,依此类推。
如果您能帮助找出正确的选择语句,我将不胜感激。谢谢。
【问题讨论】:
-
与您的问题无关,但为什么输入 YYYY 而不是英文 (YEAR)? The other lazy shortcuts (MM and DD) simply have to go...
-
我会记住的。谢谢你告诉我。
标签: sql date sql-server-2012