select to_char(to_date(T.FROMDATE, 'yyyymmdd') + level - 1, 'yyyymmdd') YMD from dual, T
connect by level <= ( select to_date(T.TODATE, 'yyyymmdd') - to_date(T.FROMDATE, 'yyyymmdd') + 1 from T)
시작일과 종료일을 넣어주면
시작일 부터 종료일 사이의 모든 날짜를 출력해주는 쿼리인데
mysql에선 connect by를 지원하지 않아 어떤식으로 풀어가야할지 감이 잡히지 않습니다.
위 쿼리를 mysql로 바꾸려면 어떻게 해야할까요?
1. 숫자가 저장되어 있는 copy_t 테이블을 미리 만들어 두고 사용하세요.
2. 일자가 저장되어 있는 달력 테이블을 미리 만들어 두고 사용하세요.
3. mariaDB 인 경우 시퀀스 테이블 (예 : seq_1_to_100) 을 이용할 수 있습니다.
-- 1. copy_t SELECT DATE_FORMAT(sdt + INTERVAL lv - 1 DAY, '%Y%m%d') dt FROM (SELECT 1 lv UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 ) copy_t INNER JOIN (SELECT '20180101' sdt, '20180107' edt) a ON lv <= DATEDIFF(edt, sdt) + 1 ; -- 2. calendar_t SELECT dt FROM (SELECT '20180101' dt UNION ALL SELECT '20180102' UNION ALL SELECT '20180103' UNION ALL SELECT '20180104' UNION ALL SELECT '20180105' UNION ALL SELECT '20180106' UNION ALL SELECT '20180107' UNION ALL SELECT '20180108' UNION ALL SELECT '20180109' ) calendar_t INNER JOIN (SELECT '20180101' sdt, '20180107' edt) a ON dt BETWEEN sdt AND edt ; -- 3. mariaDB seq SELECT DATE_FORMAT(sdt + INTERVAL seq - 1 DAY, '%Y%m%d') dt FROM seq_1_to_9 INNER JOIN (SELECT '20180101' sdt, '20180107' edt) a ON seq <= DATEDIFF(edt, sdt) + 1 ;