generate sql temp table of sequential dates to left outer join to

前端 未结 3 1276
有刺的猬
有刺的猬 2020-12-18 05:34

i have a table of data that i want to select out via stored proc such that users can connect a MS excel front end to it and use the raw data as a source to graph.

T

相关标签:
3条回答
  • 2020-12-18 06:22

    One way would be with a CTE:

    with cte_dates as (
      select cast('20110119' as datetime) as [date]
      union all
      select dateadd(dd, 1, [date])
          from cte_dates
          where dateadd(dd, 1, [date]) <= '20111231'
    )
    select [date], YourColumn
        from cte_dates
            left join YourTable
                on ...
    option (maxrecursion 0);
    
    0 讨论(0)
  • 2020-12-18 06:24

    In SQL Server 2005 and up, you can use something like this (a Common Table Expression CTE) to do this:

    DECLARE @DateFrom DATETIME
    SET @DateFrom = '2011-01-01'
    
    DECLARE @DateTo DATETIME
    SET @DateTo = '2011-01-10'
    
    ;WITH DateRanges AS
    (
        SELECT @DateFrom AS 'DateValue'
        UNION ALL
        SELECT DATEADD(DAY, 1, DateValue)
        FROM DateRanges
        WHERE DateValue < @DateTo
    )
    SELECT * FROM DateRanges
    

    You could LEFT OUTER JOIN this CTE against your table and return the result.

    0 讨论(0)
  • 2020-12-18 06:26

    Another way to do it is with a memory table. It won't choke due to recursion limitations like some of the above solutions.

    DECLARE @dates AS TABLE ([Date] date);
    
    DECLARE @date date = {d '2010-10-01'};
    DECLARE @endDate date = {d '2010-11-01'};
    
    while (@date < @endDate)
    BEGIN
        INSERT INTO @dates VALUES (@date);
        SET @date = dateadd(DAY, 1, @date)
    END
    SELECT * FROM @dates;
    

    SQL Fiddle

    0 讨论(0)
提交回复
热议问题