我真的不确定如何处理我正在寻找的查询,并希望有人可以帮助我。基本上我完全想要下面的查询,除了将它们与动态年份一起使用,这样我每年都不需要更新SPROC;
SELECT
case
when Convert(varchar(8), getDate(),1) between '01/01/2013' and '03/31/2013' then '04/01/2013 - 06/30/2013'
when Convert(varchar(8), getDate(),1) between '04/01/2013' and '06/30/2013' then '07/01/2013 - 09/30/2013'
when Convert(varchar(8), getDate(),1) between '07/01/2013' and '09/30/2013' then '10/01/2013 - 12/31/2013'
when Convert(varchar(8), getDate(),1) between '10/01/2013' and '12/31/2013' then '01/01/2014 - 03/31/2014'
end
我想让它像
一样运作when Convert(varchar(8), getDate(), 1) between '01/01/currentYear' and '03/31/currentYear' then '04/01/thisyear - 06/30/currentYear'
如果有人能给我一些帮助,那就太好了。 非常感谢你, NickG
答案 0 :(得分:1)
将年份作为参数传递:
DECLARE @YEAR VARCHAR(4)
SET @YEAR = DATEPART(YEAR,GETDATE())
SELECT
case
when Convert(varchar(8), getDate(),1) between '01/01/'+ @YEAR and '03/31/'+ @YEAR then '04/01/'+@YEAR+' - 06/30/'+@YEAR
when Convert(varchar(8), getDate(),1) between '04/01/'+ @YEAR and '06/30/'+ @YEAR then '07/01/'+@YEAR+' - 09/30/'+@YEAR
when Convert(varchar(8), getDate(),1) between '07/01/'+ @YEAR and '09/30/'+ @YEAR then '10/01/'+@YEAR+' - 12/31/'+@YEAR
when Convert(varchar(8), getDate(),1) between '10/01/'+ @YEAR and '12/31/'+ @YEAR then '01/01/'+@YEAR+' - 03/31/'+@YEAR
end
答案 1 :(得分:1)
您可以在不使用CASE
声明的情况下执行此操作:
SELECT CONVERT(VARCHAR(8),(DATEADD(quarter, 1+DATEDIFF(quarter, 0, GETDATE()), 0)),1)+ ' - '
+ CONVERT(VARCHAR(8),(DATEADD(day,-1,DATEADD(quarter, 2+DATEDIFF(quarter, 0, GETDATE()), 0))),1)
确认它适用于其他日期:
DECLARE @date DATE = '2012-12-10'
SELECT CONVERT(VARCHAR(8),(DATEADD(quarter, 1+DATEDIFF(quarter, 0, @date), 0)),1)
+ ' - '
+ CONVERT(VARCHAR(8),(DATEADD(day,-1,DATEADD(quarter, 2+DATEDIFF(quarter, 0, @date), 0))),1)