[MySQL] 연도(year), 월(month), 주(week), 일(day) 출력

niz w·2024년 11월 21일

SQL

목록 보기
8/17

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


여기서 중요한 건 WEEK이다! 아래에서 이어서 설명하겠다!




단순하게 year, month의 경우, 날짜값을 넣으면 연도만 추출하는 기능이다.

select year(now()) from dual;

=> 2024 출력


select month(now()) from dual;

=> 11 출력




하지만 week의 경우 날짜값 외에 하나 더 들어간다.
상단의 이미지처럼 week(date, [mode])의 형태가 된다.

👉 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 days1월 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년도의 주로 포함되었기 때문이다!

이를 실제 프로젝트에서 통계로 사용하는 경우에는 기획단계에서 명확히 결정하고 사용하면 된다!

0개의 댓글