DATETIME 형식의 데이터를 활용해서 연도별, 월별, 주별 등의 기록을 뽑아낼 일이 생겼다.
작성하는 김에 해당 내용을 정리해보려고 한다!🤔

여기서 중요한 건 WEEK이다! 아래에서 이어서 설명하겠다!
단순하게 year, month의 경우, 날짜값을 넣으면 연도와 월만 추출하는 기능이다.
select year(now()) from dual;=> 2024 출력
select month(now()) from dual;=> 11 출력
하지만 week의 경우 날짜값 외에 하나 더 들어간다.
상단의 이미지처럼 week(date, [mode])의 형태가 된다.
| MODE | 시작 요일(First Day Of Week) | 범위(Range) | Week 1 is the First Week(첫 주 포함 여부) |
|---|---|---|---|
| 0 | Sunday | 0-53 | with 4 or more days in this year |
| 1 | Monday | 0-53 | with a Sunday in this year |
| 2 | Sunday | 1-53 | with a Sunday in this year |
| 3 | Monday | 1-53 | with 4 or more days in this year |
| 4 | Sunday | 0-53 | with 4 or more days in this year |
| 5 | Monday | 0-53 | with a Monday in this year |
| 6 | Sunday | 1-53 | with 4 or more days in this year |
| 7 | Monday | 1-53 | with a Monday in this year |
여기서 범위는 출력 값에 숫자를 부여할 때 1부터 할지, 0부터 할지를 의미한다.
마지막 컬럼에서 4 or more days는 1월 1일이 포함된 주(새해)의 경우 4일 이상 있으면 1주로 인식하고, 그렇지 않으면 그 다음 주를 1주로 인식하겠다는 의미이다!
SELECT
WEEK('2020-01-04', 0) AS 'Mode 0',
WEEK('2020-01-04', 1) AS 'Mode 1',
WEEK('2020-01-04', 2) AS 'Mode 2',
WEEK('2020-01-04', 4) AS 'Mode 4',
WEEK('2020-01-04', 5) AS 'Mode 5',
WEEK('2020-01-04', 6) AS 'Mode 6',
WEEK('2020-01-04', 7) AS 'Mode 7';
2020-01-04를 기준으로 각 모드를 출력해보면 이미지의 결과가 나온다!
week의 경우 그 해에서 몇 번째 주에 해당하는지가 출력되며, 52의 값은 첫 주가 4일 이상이 아니므로 2019년도의 주로 포함되었기 때문이다!
이를 실제 프로젝트에서 통계로 사용하는 경우에는 기획단계에서 명확히 결정하고 사용하면 된다!