2017-02-24 69 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

相关问题