我有一个请求表,其中包含 3 条记录,其结构为:Id、DateFrom、DateTo
Id DateFrom DateTo
1 15/01/2019 15/01/2019
2 21/01/2019 28/01/2019
3 04/02/2019 09/02/2019
And I want an output like this:
Id Date
1 15/01/2019
2 21/01/2019
2 22/01/2019
2 23/01/2019
2 24/01/2019
2 25/01/2019
2 26/01/2019
2 27/01/2019
2 28/01/2019
3 04/02/2019
3 05/02/2019
3 06/02/2019
3 07/02/2019
3 08/02/2019
3 09/02/2019
我创建了一个表值函数来显示一系列基于日期的 DateFrom 和 DateTo。
CREATE FUNCTION [dbo].[tvfhrms_Calendar_DateRange](@DateFrom date, @DateTo date)
RETURNS @DateOfTheYear Table(Level int,SysDate date)
AS
BEGIN
WITH AllDays
AS (
SELECT [Level] = 1
,[Date] = @DateFrom
UNION ALL
SELECT [Level] = [Level] + 1
,[Date] = DATEADD(DAY, 1, [Date])
FROM AllDays
WHERE [Date] < @DateTo
)
INSERT @DateOfTheYear
SELECT [Level]
,[SysDate]=[Date]
FROM AllDays OPTION (MAXRECURSION 0)
RETURN
END
然后在选择查询中使用时,
SELECT sysdate from [dbo].[tvfhrms_Calendar_DateRange]('2019-01-10', '2019-02-09')
这将给出 Datefrom 到 DateTo 序列的结果。 如何将其集成到我的表中,以便我可以得到我期望的输出?
最佳答案
您可以使用APPLY
:
SELECT tt.*
FROM table t CROSS APPLY
(SELECT tt.*
FROM [dbo].[tvfhrms_Calendar_DateRange] (t.datefrom, t.dateto) AS tt
) tt;
关于sql-server - 如何显示日期范围内的日期表格记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54421784/