안녕하세요. MySQL에서 날짜가 있는 컬럼을 해당월에 주차로 구분하려고 합니다.
테이블에 데이터는 아래 처럼 들어가 있습니다.
SELECT DATE_FORMAT(reg_date, '%Y-%m-%d') AS `date`, DATE_FORMAT(DATE_SUB(reg_date, INTERVAL (DAYOFWEEK(reg_date)-1) DAY), '%Y/%m/%d') as '이번주시작날짜', DATE_FORMAT(DATE_SUB(reg_date, INTERVAL (DAYOFWEEK(reg_date)-7) DAY), '%Y/%m/%d') as '이번주끝날짜', WEEK(reg_date)-WEEK(DATE_ADD(reg_date, INTERVAL -DAY(reg_date)+1 DAY))+1 AS WEEK_DATE2, WEEK(DATE_FORMAT(reg_date, "%Y%m%d"), 5) - WEEK(DATE_SUB(DATE_FORMAT(reg_date, "%Y%m%d"), INTERVAL DAYOFMONTH(DATE_FORMAT(reg_date, "%Y%m%d")) - 1 DAY),5) + 1 AS WEEK_DATE2 FROM test_st GROUP BY date
[결과]
date | 이번주시작날짜 | 이번주끝날짜 | WEEK_DATE2 | WEEK_DATE2 |
2018-09-30 | 2018-09-30 | 2018-10-06 | 6 | 5 |
2018-10-01 | 2018-09-30 | 2018-10-06 | 1 | 1 |
2018-10-03 | 2018-09-30 | 2018-10-06 | 1 | 1 |
2018-10-07 | 2018-10-07 | 2018-10-13 | 2 | 1 |
2018-10-10 | 2018-10-07 | 2018-10-13 | 2 | 2 |
2018-10-14 | 2018-10-14 | 2018-10-20 | 3 | 2 |
2018-10-19 | 2018-10-14 | 2018-10-20 | 3 | 3 |
2018-10-21 | 2018-10-21 | 2018-10-27 | 4 | 3 |
2018-10-23 | 2018-10-21 | 2018-10-27 | 4 | 4 |
2018-10-28 | 2018-10-28 | 2018-11-03 | 5 | 4 |
2018-11-01 | 2018-10-28 | 2018-11-03 | 1 | 1 |
2018-11-04 | 2018-11-04 | 2018-11-10 | 2 | 1 |
2018-11-05 | 2018-11-04 | 2018-11-10 | 2 | 2 |
구글링으로 얻은 정보로 WEEK_DATE1과 WEEK_DATE2 2가지 방법으로 주차를 구하는 쿼리를 찾을수 있었는데 원하는 데이터가 나오지 않아 질문 드리게 되었습니다.
제가 원하는 것은 이미지 에서 빨간색으로 표시 한 것 처럼
9/30 ~ 10/6 (일요일 ~ 토요일) 1주차
10/7 ~ 10/13 (일요일 ~ 토요일) 2주차
10/14 ~ 10/20 (일요일 ~ 토요일) 3주차
10/21 ~ 10/27 (일요일 ~ 토요일) 4주차
10/28 ~ 11/03 (일요일 ~ 토요일) 5주차
11/04 ~ 11/10 (일요일 ~ 토요일) 1주차 - 11월의
이렇게 출력이 되도록 하고 싶은데 검색을 해봐도 잘 모르겠어서 질문 드립니다.
감사합니다.
WITH test_st AS ( SELECT '2018-09-29' reg_date UNION ALL SELECT '2018-09-30' UNION ALL SELECT '2018-10-01' UNION ALL SELECT '2018-10-03' UNION ALL SELECT '2018-10-06' UNION ALL SELECT '2018-10-07' UNION ALL SELECT '2018-10-10' UNION ALL SELECT '2018-10-14' UNION ALL SELECT '2018-10-19' UNION ALL SELECT '2018-10-21' UNION ALL SELECT '2018-10-23' UNION ALL SELECT '2018-10-28' UNION ALL SELECT '2018-10-31' UNION ALL SELECT '2018-11-01' UNION ALL SELECT '2018-11-02' UNION ALL SELECT '2018-11-03' UNION ALL SELECT '2018-11-04' UNION ALL SELECT '2018-11-05' ) SELECT dt , dt + INTERVAL (1 - DAYOFWEEK(dt)) DAY sdt , dt + INTERVAL (7 - DAYOFWEEK(dt)) DAY edt , DATE_FORMAT(ym, '%Y-%m') ym , FLOOR(DATEDIFF(dt , ym + INTERVAL (1 - DAYOFWEEK(ym) + CASE WHEN DAYOFWEEK(ym) > 4 THEN 7 ELSE 0 END) DAY ) / 7 + 1) w FROM (SELECT DISTINCT DATE(reg_date) dt , DATE_FORMAT(reg_date + INTERVAL (4 -DAYOFWEEK(reg_date)) DAY, '%Y-%m-01') ym FROM test_st ) a ;