gpt4 book ai didi

sql - 生成存储在表中的两个日期之间的所有日期

转载 作者:行者123 更新时间:2023-12-03 14:10:32 25 4
gpt4 key购买 nike

SQL 服务器 2014

我需要从表 #data 中生成开始日期和结束日期之间的所有日期。表 #data 包含几行开始和结束日期。

CREATE TABLE #data  (
StartDate DATE NOT NULL,
EndDate DATE NOT NULL,
Opt INT NOT NULL)

insert into #data values('2016-04-10', '2016-04-12', 2)
insert into #data values('2016-04-10', '2016-04-15', 3)
insert into #data values('2016-05-10', '2016-05-12', 4)

#data 表可能包含数百行。

我的最终选择应包含:

2016-04-10 2
2016-04-11 2
2016-04-12 2
2016-04-10 3
2016-04-11 3
2016-04-12 3
2016-04-13 3
2016-04-14 3
2016-04-15 3
2016-05-10 4
2016-05-11 4
2016-05-12 4

我目前有这个,但我必须扩展#data 中所有行的选择:

DECLARE @StartDateTime DATETIME
DECLARE @EndDateTime DATETIME

SET @StartDateTime = '2015-01-01'
SET @EndDateTime = '2015-01-12';

--delete from #tmp

;WITH DateRange(DateData) AS
(
SELECT @StartDateTime as Date
UNION ALL
SELECT DATEADD(d,1,DateData)
FROM DateRange
WHERE DateData < @EndDateTime
)
INSERT INTO #tmp SELECT DateData, 1 -- instead of 1 shall be Opt
FROM DateRange
OPTION (MAXRECURSION 0)

select * from #tmp

谢谢。

最佳答案

也许这就是你想要的?

;WITH DateRange(DateData, EndDate, Opt) AS 
(
SELECT StartDate, EndDate , Opt FROM #data
UNION ALL
SELECT DATEADD(d,1,DateData), EndDate, Opt
FROM DateRange
WHERE DateData < EndDate
)
SELECT DateData, Opt
FROM DateRange
ORDER BY opt, DateData
OPTION (MAXRECURSION 0)

不过,我会考虑生成一个合适的日历表。如果你有一个,你可以更有效地完成你想要的结果(通过使用与日历表的连接)。

有关示例和更多信息,请参阅这些文章:

http://www.sqlservercentral.com/blogs/dwainsql/2014/03/30/calendar-tables-in-t-sql/

https://www.mssqltips.com/sqlservertip/4054/creating-a-date-dimension-or-calendar-table-in-sql-server/

关于sql - 生成存储在表中的两个日期之间的所有日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36668970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com