안녕하세요.. 날짜구간의 시간을 구하고 싶습니다...
시작일시 : 2019.01.20 09:10:10
종료일시 : 2019.01.21 11:10:10
결과
2019.01.20 09~10
2019.01.20 10~11
2019.01.20 11~12
2019.01.20 12~13
.
2019.01.21 11~12
이렇게 구할수 있을까요???
SELECT TO_CHAR(DayHour, 'YYYY.MM.DD HH24')||'~'||TO_CHAR(DayHour+1/24, 'HH24') TermDayHour FROM ( SELECT FromTime+LEVEL/24-1 DayHour FROM ( SELECT TO_DATE('2019.01.20 09:10:10', 'YYYY.MM.DD HH24:MI:SS') FromTime, TO_DATE('2019.01.21 11:10:10', 'YYYY.MM.DD HH24:MI:SS') ToTime FROM DUAL ) CONNECT BY FromTime+LEVEL/24-1 <= ToTime )
박인호님 샘플의 시작시간과 종료시간의 분초가 동일한데. 10:10 시작시간의 분초가 종료시간의 분초보다 크면 마지막 1시간이 누락되게 됩니다. 예) 시작분초 10:11, 종료분초 10:10 일 경우 마지막 1시간이 누락
SELECT TO_CHAR(sdt + (LEVEL-1)/24, 'yyyy.mm.dd hh24~') || TO_CHAR(sdt + (LEVEL-0)/24, 'hh24') dt FROM (SELECT TO_DATE('2019.01.20 09:10:11', 'yyyy.mm.dd hh24:mi:ss') sdt , TO_DATE('2019.01.21 11:10:10', 'yyyy.mm.dd hh24:mi:ss') edt FROM dual ) CONNECT BY LEVEL <= ROUND((TRUNC(edt, 'hh') - TRUNC(sdt, 'hh')) * 24 + 1) ;
그렇군요 ^^
경우의 수를 모두 체크를 하지 않으면
늘 어딘가에서 펑크가 ...
감사합니다.