안녕하세요.
시작일과 종료일 날짜 조회 관련해서 문의 드리려 합니다.
start_date, end_date, real_end_date 필드 다 bpchar형 이구요
설정된 기간 내에 기간이 하루라도 속하면 리스트에 출력 되도록 하고 싶습니다.
start_date | end_date | real_end_date |
20210301 | 20210302 | |
20210303 | 20210530 | |
20210306 | 20210621 | 20210331 |
20210308 | 20210630 |
SELECT
*
FROM main a
WHERE 1=1
AND a.start_date >= '20210301'
AND a.end_date <= '20210331'
위 쿼리로는 현재 한건이 나오지만
제가 원하는건 하루라도 포함이 되어있는건은 다 나오게 하고 싶습니다.
<원하는결과>
20210301 | 20210302 | |
20210303 | 20210530 | |
20210306 | 20210621 | 20210331 |
20210308 | 20210630 |
그리고 조회 종료일 기준을 real_end_date필드에
값이 있으면 real_end_date로
값이 없으면 end_date로 하고 싶은데요.....
도움 부탁드립니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | WITH main AS ( SELECT '20210301' start_date, '20210302' end_date, null real_end_date FROM dual UNION ALL SELECT '20210303' , '20210530' , null FROM dual UNION ALL SELECT '20210306' , '20210621' , '20210331' FROM dual UNION ALL SELECT '20210308' , '20210630' , null FROM dual ) SELECT * FROM main WHERE 1=1 AND start_date <= '20210331' AND NVL(real_end_date, end_date) >= '20210301' ; -- 시작, 종료 교차 비교 |