sql-server - 如何显示日期范围内的日期表格记录

标签 sql-server

我有一个请求表,其中包含 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/

相关文章:

sql-server - 随时随地将 sql 查询结果导出到 excel 文件

c# - 如何使用c#插入和更新命令

sql - OLEDB 源任务是否将所有行传递给 OLE DB 命令任务,并且 OLE DB 命令任务一次处理一条记录?

c# - Newtonsoft.Json.JsonSerializationException(从“System.Data.SqlTypes.SqlDouble”上的 'Value' 获取值时出错)序列化 SqlGeography

sql-server - 将表表达式传递给表参数化函数

sql - Left Join 子查询的前 1 位

sql - INNER Join 的案例声明

sql-server - 使用 T-SQL 语法生成复杂的 XML

sql-server - 不同步时重新启动日志传送

sql-server - T-SQL : What is NOT(1=NULL)?