2013-07-09 20 views
2

我在我的存儲過程@FromDate和@ToDate中有2個參數,我想弄清@FromDate和@ToDate之間的週數,@FromDate總是一個週一同時@ToDate始終是一個星期天,但日期可以覆蓋周,月等參數日期之間的週數 - 逐組 - SQL

目前我有DATEDIFF(WW,@FromDate,@ToDate)

它返回說4,但我想它返回1,2,3行和4行,而不是隻有一行。

達到此目的的最佳方法是什麼?

回答

2

如果我猜中了:

With T(Number) as 
(
    Select 0 as Number 
     union all 
    Select Number + 1 
     from T 
     where Number < DATEDIFF(WW, @FromDate, @ToDate) 

) 

SELECT NUMBER FROM T WHERE Number>0; 

SQLFiddle demo

+1

情況下,它不會給正確的結果,答案是小於0回答會處理這種情況 –

+0

@RohitSingh:我已經改變了這個查詢來處理這個問題在0周的情況下,它現在沒有返回任何東西。謝謝 – valex

+0

謝謝,這很好。存儲過程在那裏的方式總是至少有1個,所以0周不會進入,但只是爲了安全起見。 – DtotheG

0
DECLARE @StartDate DATETIME 
DECLARE @EndDate DATETIME 

SET @StartDate = GETUTCDATE() - 90 
SET @EndDate = GETUTCDATE() 

DECLARE @WeekNumber INT 

SET @WeekNumber = DATEDIFF(WW, @StartDate, @EndDate) ; 

WITH CTE_WeekNumber (WeekNumber) 

     AS (SELECT 1 
      WHERE @WeekNumber >= 1 
      UNION ALL 
      SELECT WeekNumber + 1 
      FROM  CTE_WeekNumber 
      WHERE @WeekNumber >= WeekNumber + 1 
     ) 

SELECT * 
FROM CTE_WeekNumber