gpt4 book ai didi

sql - 在 SQL Server 中获取日期范围内的所有日期

转载 作者:行者123 更新时间:2023-12-01 09:05:04 26 4
gpt4 key购买 nike

我从一个被问到的 StackOverflow 问题中得到了这个例子,但我无法根据我的需要让它工作。

WITH DateTable
AS
(
SELECT CAST('20110101' as Date) AS [DATE]
UNION ALL
SELECT DATEADD(dd, 1, [DATE]) FROM DateTable
WHERE DATEADD(dd, 1, [DATE]) < cast('20110131' as Date)
)
SELECT dt.[DATE] FROM [DateTable] dt

输入-

ID |   FromDate  | ToDate
=============================
1 | 2011-11-10 | 2011-11-12
2 | 2011-12-12 | 2011-12-14

输出 -

SN |   Dates     | 
==================
1 | 2011-11-10 |
2 | 2011-11-11 |
3 | 2011-11-12 |
4 | 2011-12-12 |
5 | 2011-12-13 |
6 | 2011-12-14 |

查看此代码适用于静态日期。但就我而言,我有一个包含三列 Id、FromDate、ToDate 的表。现在我想将每一行中的每个范围转换为单独的日期。

如果范围来自表,并且显然必须为范围表中的每一行运行此查询,我无法让上面的示例工作,这是另一个令人困惑的挑战。

请帮忙。

最佳答案

在数字表的帮助下。

declare @T table
(
ID int identity primary key,
FromDate date,
ToDate date
)

insert into @T values
('2011-11-10', '2011-11-12'),
('2011-12-12', '2011-12-14')

select row_number() over(order by D.Dates) as SN,
D.Dates
from @T as T
inner join master..spt_values as N
on N.number between 0 and datediff(day, T.FromDate, T.ToDate)
cross apply (select dateadd(day, N.number, T.FromDate)) as D(Dates)
where N.type ='P'

试穿SE Data

关于sql - 在 SQL Server 中获取日期范围内的所有日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9140308/

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