2017-05-22 4 views

Antwort

2

Sie eine Strichliste Tabelle, dies zu tun verwenden können.

declare @start date='2015-12-25'; 
declare @end date = '2017-06-30'; 

select distinct year(dateadd(day,rnum,@start)) yr, 
datepart(quarter,dateadd(day,rnum,@start)) qtr 
from (select row_number() over(order by (select null)) as rnum 
     from master..spt_values) t 
where dateadd(day,rnum,@start) <= @end; 
+0

Danke . Du schaukelst! – user3335081

1

Wenn Sie mehr als 6 Jahren zu überbrücken ... praktisch identisch mit vkp (er ist so schnell!)

Declare @Date1 date = '2015-12-25' 
Declare @Date2 date = '2017-06-30' 

Select Distinct 
     [Year] =DatePart(YEAR,D) 
     ,[Quarter]=DatePart(QUARTER,D) 
From (
     Select Top (DateDiff(DD,@Date1,@Date2)+1) D=DateAdd(DAY,-1+Row_Number() Over (Order By (Select Null)),@Date1) 
     From master..spt_values n1,master..spt_values n2 
    ) A 

Returns

Year Quarter 
2015 4 
2016 1 
2016 2 
2016 3 
2016 4 
2017 1 
2017 2 
+0

Danke. Du schaukelst! – user3335081

0
Declare @StartDate Date='2016-01-01' 
     , @EndDate Date='2017-05-01' 

DECLARE @Date TABLE 
(
    [Year] INT, 
    [Quarter] INT 
) 

WHILE @StartDate <= @EndDate 
BEGIN 
    INSERT INTO @Date 
    ([Year], 
    [Quarter]) 

SELECT DATEPART(YEAR,@StartDate) AS [Year], 
     CASE WHEN DATEPART(MM,@StartDate) BETWEEN 1 AND 3 THEN 1 
      WHEN DATEPART(MM,@StartDate) BETWEEN 4 AND 6 THEN 2 
      WHEN DATEPART(MM,@StartDate) BETWEEN 7 AND 9 THEN 3 
      WHEN DATEPART(MM,@StartDate) BETWEEN 10 AND 12 THEN 4 
     END AS [Quarter] 
SET  @StartDate = DATEADD(DAY,1,@StartDate) 
END 

SELECT DISTINCT [Year],[Quarter] FROM @Date 
Verwandte Themen