복붙노트

[SQL] 날짜 범위에있는 모든 날짜 SQL 서버에서 가져 오기

SQL

날짜 범위에있는 모든 날짜 SQL 서버에서 가져 오기

나는 물었다 하나 개 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 |

이 코드는 정적 날짜에 대해 잘 작동을 참조하십시오. 하지만 내 경우에는 내가 세 개의 열 아이디, FROMDATE, TODATE를 포함하는 테이블이 있습니다. 지금은 각 날짜에 모든 행에 각 범위를 변환 할.

범위가 테이블에서 온다 분명히이 쿼리는 또 다른 혼란 도전 범위 테이블의 모든 행에 대해 실행하는 경우 나는 경우 일에 위의 예를 얻을 수 없습니다.

도와주세요.

해결법

  1. ==============================

    1.번호 테이블의 작은 도움으로.

    번호 테이블의 작은 도움으로.

    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 데이터에 시도

  2. ==============================

    2.

    create table Dates (Id int, FromDate date, ToDate date)
    insert into Dates values (1, '2011-11-10', '2011-11-12')
    insert into Dates values (2, '2011-12-12', '2011-12-14')
    
    with DateTable as
    (
        select FromDate as Dt, ToDate
        from Dates
        union all
        select DATEADD(D, 1, Dt), ToDate
        from DateTable
        where DATEADD(D, 1, Dt) <= ToDate
    )
    select ROW_NUMBER() over (order by Dt) as SN, Dt as Dates
    from DateTable
    order by Dt
    
  3. ==============================

    3.무엇에 대해?

    무엇에 대해?

    --DROP TABLE #Test
    CREATE TABLE #Test(ID int, FromDate datetime, ToDate datetime)
    INSERT INTO  #Test VALUES (1, '2011-11-10', '2011-11-12')
    INSERT INTO  #Test VALUES (2, '2011-12-12', '2011-12-14')
    
    ;
    WITH DateTable
    AS
    (
        SELECT  ID, FromDate, ToDate, 0 AS Seed FROM #Test
        UNION   ALL
        SELECT  ID, DATEADD(dd, 1, FromDate), ToDate, Seed + 1
        FROM    DateTable
        WHERE   DATEADD(dd, 1, FromDate) <= ToDate
    )
    SELECT  --*
            ROW_NUMBER() OVER (ORDER BY ID, Seed) SN, FromDate AS Dates
    FROM    DateTable
    
  4. from https://stackoverflow.com/questions/9140308/get-all-dates-in-date-range-in-sql-server by cc-by-sa and MIT license