날짜 생성을 위한 여러 날짜 범위 처리
두 날짜 사이의 날짜를 생성하는 것은 다양한 프로그래밍 시나리오에서 일반적으로 발생합니다. 단일 범위에 대한 날짜를 생성하는 것은 간단하지만 여러 범위를 처리하도록 이 기능을 확장하면 문제가 발생할 수 있습니다.
각 행이 날짜 범위를 나타내는 다음 표를 고려하세요.
ID | START_DATE | END_DATE |
---|---|---|
101 | April 1, 2013 | April 10, 2013 |
102 | May 10, 2013 | May 12, 2013 |
예상되는 날짜 출력은 각 범위 내의 개별 날짜를 생성해야 합니다.
ID | Dates |
---|---|
101 | April 1, 2013 |
101 | April 2, 2013 |
... | ... |
101 | April 10, 2013 |
102 | May 10, 2013 |
102 | May 11, 2013 |
102 | May 12, 2013 |
Oracle은 이를 달성하기 위한 독창적인 솔루션을 제공합니다. 결과:
select A.ID, A.START_DATE + (delta - 1) dt from t_dates A, ( select level-1 as delta from dual connect by level-1 <= ( select max(end_date - start_date) from t_dates ) ) where A.START_DATE + (delta - 1) <= A.end_date order by 1, 2;
델타 열은 Oracle의 CONNECT BY 계층 구조를 사용하여 1부터 테이블의 종료 날짜와 시작 날짜 사이의 최대 차이까지 정수 시퀀스를 생성합니다. A.START_DATE(델타 - 1) 표현식은 결과의 각 레코드에 대해 적절한 델타만큼 시작 날짜를 증가시킵니다. WHERE 절은 현재 날짜 범위의 종료 날짜를 초과하는 결과를 필터링합니다.
Oracle에서 여러 범위에 걸쳐 날짜를 생성하는 이 우아한 솔루션을 즐겨보세요!
위 내용은 Oracle에서 여러 날짜 범위에 걸쳐 날짜를 생성하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!