WEEK 함수는 지정된 인자로부터 0~53 범위의 주를 반환한다. 인자로 DATE, TIMESTAMP, DATETIME 타입을 지정할 수 있으며, INTEGER 타입을 반환한다.
함수의 두 번째 인자인 mode는 생략할 수 있으며, 0~7 범위의 값을 입력한다. 이 값으로 한 주가 일요일부터 시작하는지 월요일부터 시작하는지, 리턴 값의 범위가 0~53인지 1~53인지 설정한다. mode를 생략하면 시스템 파라미터 default_week_format의 값이 사용된다. mode 값의 의미는 다음과 같다.
mode |
시작 요일 |
범위 |
해당 연도의 첫 번째 주 |
---|---|---|---|
0 |
일요일 |
0~53 |
일요일이 해당 연도에 속하는 첫 번째 주 |
1 |
월요일 |
0~53 |
3일 이상이 해당 연도에 속하는 첫 번째 주 |
2 |
일요일 |
1~53 |
일요일이 해당 연도에 속하는 첫 번째 주 |
3 |
월요일 |
1~53 |
3일 이상이 해당 연도에 속하는 첫 번째 주 |
4 |
일요일 |
0~53 |
3일 이상이 해당 연도에 속하는 첫 번째 주 |
5 |
월요일 |
0~53 |
월요일이 해당 연도에 속하는 첫 번째 주 |
6 |
일요일 |
1~53 |
3일 이상이 해당 연도에 속하는 첫 번째 주 |
7 |
월요일 |
1~53 |
월요일이 해당 연도에 속하는 첫 번째 주 |
mode 값이 0, 1, 4, 5 중 하나이고 날짜가 이전 연도의 마지막 주에 해당하면 WEEK 함수는 0을 반환한다. 이때의 목적은 해당 연도에서 해당 주가 몇 번째 주인지를 아는 것이므로, 1999년의 52번째 주에 해당해도 2000년의 날짜가 0번째 주에 해당되는 0을 반환한다.
SELECT YEAR('2000-01-01'), WEEK('2000-01-01',0);
year('2000-01-01') week('2000-01-01', 0)
=============================================
2000 0
시작 요일이 속해있는 주의 연도를 기준으로 해당 날짜가 몇 번째 주인지 알려면, mode 값으로 0, 2, 5, 7 중 하나의 값을 사용한다.
SELECT WEEK('2000-01-01',2);
week('2000-01-01', 2)
========================
52
WEEK(date[, mode])
SELECT WEEK('2010-04-05');
week('2010-04-05', 0)
========================
14
SELECT WEEK('2010-04-05 12:34:56',2);
week('2010-04-05 12:34:56',2)
===============================
14
SELECT WEEK('2010-04-05 12:34:56.7890',4);
week('2010-04-05 12:34:56.7890',4)
====================================
14
SELECT WEEK ('12:34:56');
ERROR: Conversion error in date format.
SELECT WEEK('2010-04-05',8);
ERROR: Conversion error in date format.