如何将两个日期之间的范围 table 扩展为 SQL 服务器中的新列?

How can I expand a table with a range between two dates as a new column in SQL Server?

我有这个 table 例如:

Start date End date value
2022-01-01 2022-01-03 value1
2022-01-02 2022-01-04 value2

我想要的输出是这样的:

Start date End date value Date between
2022-01-01 2022-01-03 value1 2022-01-01
2022-01-01 2022-01-03 value1 2022-01-02
2022-01-01 2022-01-03 value1 2022-01-03
2022-01-02 2022-01-04 value2 2022-01-02
2022-01-02 2022-01-04 value2 2022-01-03
2022-01-02 2022-01-04 value2 2022-01-04

提前致谢!

如前所述,您需要一个日历 table。
这是创建一个的方法

create table calendar (id int identity, cdate date not null)

并像这样填写一次(选择一个足够远的未来结束日期,以及一个足够远的过去的开始日期,这样你就不必再向这个 table 添加行了

;WITH N AS(
    SELECT N
    FROM (VALUES(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL))N(N)),
Tally AS(
    SELECT 0 AS I
    UNION ALL                 --startdate  enddate
    SELECT TOP (DATEDIFF(DAY, '20220101', '20220301')) 
           ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS I
    FROM N N1, N N2, N N3), --up to 1,000 days
Dates AS(
    SELECT DATEADD(DAY, T.I, '20220101') AS Date
    FROM Tally T)
insert into calendar (cdate)    
SELECT D.Date
FROM Dates D

现在您有一个名为 calendar 的 table,您可以在其中加入,现在您需要的查询非常简单

select t.startdate,
       t.enddate,
       t.value,
       c.cdate as datebetween
from   mytable t
  left join calendar c on c.cdate >= t.startdate
                      and c.cdate <= t.enddate

Click on this DBFiddle to see how it works