如何获得SQL Server中两个日期之间的开始日期和结束日期
问题描述:
大家好,我正在研究某种会计系统,并遇到一些困难。这个问题已经由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
代码的伟大工程,就像我想要什么。但我想将结果插入到新表中。我怎么做?
答
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
什么是您的预期输出..? – Mansoor
来自@Abdul Rasheed的代码 –
请确保标题符合您的实际问题 – HoneyBadger