2017-02-24 125 views
1

大家好,我正在研究某種會計系統,並遇到一些困難。這個問題已經由Abdul Rasheed在這個網站上回答了。如何獲得SQL Server中兩個日期之間的開始日期和結束日期

這是代碼

declare @sDate datetime, 
    @eDate datetime 

select @sDate = '2013-02-21', 
    @eDate = '2013-04-25'; 

with CTE_TEST 
as (
    select @sDate SDATE, 
     DATEADD(s, - 1, DATEADD(mm, DATEDIFF(m, 0, @sDate) + 1, 0)) EDATE 

    union all 

    select EDATE + 1, 
     DATEADD(s, - 1, DATEADD(mm, DATEDIFF(m, 0, DATEADD(MONTH, 1, SDATE)) + 1, 0)) 
    from CTE_TEST C 
    where DATEADD(MONTH, 1, SDATE) < DATEADD(s, - 1, DATEADD(mm, DATEDIFF(m, 0, @eDate) + 1, 0)) 
    ) 
select DATENAME(MONTH, SDATE) MNAME, 
    SDATE, (case when EDATE > @eDate then @eDate else EDATE end) EDATE 
from CTE_TEST 

代碼的偉大工程,就像我想要什麼。但我想將結果插入到新表中。我怎麼做?

+0

什麼是您的預期輸出..? – Mansoor

+0

來自@Abdul Rasheed的代碼 –

+0

請確保標題符合您的實際問題 – HoneyBadger

回答

0
CREATE TABLE T(MNAME VARCHAR(20),SDATE DATETIME,EDATE DATETIME) 

     IF OBJECT_ID ('tempdb..#T') IS NOT NULL 
     DROP TABLE #T 

      declare @sDate datetime, 
      @eDate datetime 
      select @sDate = '2013-02-21', 
      @eDate = '2013-04-25' 
      ;WITH CTE_TEST AS (
      SELECT @sDate SDATE,DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@sDate)+1,0)) EDATE 
      UNION ALL 
      SELECT EDATE+1,DATEADD(s,-1,DATEADD(mm,DATEDIFF(m,0,DATEADD(MONTH,1,SDATE))+1,0)) 
      FROM CTE_TEST C WHERE DATEADD(MONTH,1,SDATE) < DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@eDate)+1,0)) 
    ) 
      SELECT DATENAME(MONTH,SDATE) MNAME,SDATE,(CASE WHEN EDATE > @eDate THEN @eDate ELSE EDATE END) EDATE INTO #T FROM CTE_TEST 



INSERT INTO T( MNAME, 
       SDATE, 
       EDATE) 
Select MNAME, 
SDATE, 
EDATE from #T 
+0

謝謝它的工作原理! –

+0

@RedietZewdu如果它的作品可以請你評價它作爲答案 – mohan111

相關問題