[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.번호 테이블의 작은 도움으로.
번호 테이블의 작은 도움으로.
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.
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.무엇에 대해?
무엇에 대해?
--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
from https://stackoverflow.com/questions/9140308/get-all-dates-in-date-range-in-sql-server by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] @ 기호 - MySQL의에서 재귀 SELECT 질의에 대한 해결책? (0) | 2020.06.12 |
---|---|
[SQL] 설정 제한 SQL에서 테이블 행에 대한 (0) | 2020.06.12 |
[SQL] 외래 키와 기본 키에 포스트 그레스 및 인덱스 (0) | 2020.06.12 |
[SQL] 행에 열 및 열로 MySQL의 트랜스 행 [중복] (0) | 2020.06.12 |
[SQL] 분산 트랜잭션 오류? (0) | 2020.06.12 |