MySQL DAYOFWEEK() 함수란?
MySQL의 DAYOFWEEK() 함수는 날짜 값이 한 주 중 몇 번째 요일에 해당하는지를 숫자로 반환합니다. 인덱스는 ODBC 표준을 따르며 다음과 같습니다.
- 일요일 = 1
- 월요일 = 2
- 화요일 = 3
- 수요일 = 4
- 목요일 = 5
- 금요일 = 6
- 토요일 = 7
그럼 실제 예제를 통해 테이블 생성부터 요일 번호 조회까지 전체 과정을 단계별로 살펴보겠습니다.
1단계. 예제 테이블 생성
먼저 datetime 타입의 Issuedate 컬럼을 가진 테이블을 생성합니다.
mysql> create table DayOfWeekDemo
-> (
-> Issuedate datetime
-> );
Query OK, 0 rows affected (0.52 sec)
2단계. 날짜 데이터 삽입
INSERT 문과 DATE_ADD(), CURDATE() 함수를 조합하면 현재 날짜를 기준으로 상대적인 날짜를 손쉽게 입력할 수 있습니다. 여기서는 오늘로부터 5일 후부터 11일 후까지 총 7개의 날짜를 순서대로 넣어 보겠습니다.
mysql> insert into DayOfWeekDemo values(date_add(curdate(),interval 5 day)); Query OK, 1 row affected (0.52 sec) mysql> insert into DayOfWeekDemo values(date_add(curdate(),interval 6 day)); Query OK, 1 row affected (0.13 sec) mysql> insert into DayOfWeekDemo values(date_add(curdate(),interval 7 day)); Query OK, 1 row affected (0.10 sec) mysql> insert into DayOfWeekDemo values(date_add(curdate(),interval 8 day)); Query OK, 1 row affected (0.15 sec) mysql> insert into DayOfWeekDemo values(date_add(curdate(),interval 9 day)); Query OK, 1 row affected (0.10 sec) mysql> insert into DayOfWeekDemo values(date_add(curdate(),interval 10 day)); Query OK, 1 row affected (0.13 sec) mysql> insert into DayOfWeekDemo values(date_add(curdate(),interval 11 day)); Query OK, 1 row affected (0.10 sec)
3단계. 저장된 데이터 확인
SELECT 문으로 테이블에 입력된 레코드를 확인합니다.
mysql> select *from DayOfWeekDemo;
실행 결과는 다음과 같습니다.
+---------------------+ | Issuedate | +---------------------+ | 2018-12-03 00:00:00 | | 2018-12-04 00:00:00 | | 2018-12-05 00:00:00 | | 2018-12-06 00:00:00 | | 2018-12-07 00:00:00 | | 2018-12-08 00:00:00 | | 2018-12-09 00:00:00 | +---------------------+ 7 rows in set (0.00 sec)
위 결과를 보면 2018-12-03은 월요일, 2018-12-04는 화요일처럼 날짜가 하루씩 순차적으로 증가하고 있음을 알 수 있습니다.
4단계. DAYOFWEEK()로 요일 번호 조회
이제 DAYOFWEEK() 함수를 사용해 각 날짜의 요일 인덱스를 조회해 보겠습니다.
mysql> select dayofweek(Issuedate) as WeekNumber from DayOfWeekDemo;
요일 번호가 출력되는 결과는 다음과 같습니다.
+------------+ | WeekNumber | +------------+ | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 1 | +------------+ 7 rows in set (0.00 sec)
월요일(2018-12-03)은 2, 화요일은 3으로 차례대로 반환되다가 마지막 일요일(2018-12-09)은 1로 반환된 것을 확인할 수 있습니다. 즉, DAYOFWEEK()는 일요일을 한 주의 시작(1)으로 계산합니다.
참고: WEEKDAY() 함수와의 차이점
MySQL에는 유사한 기능을 하는 WEEKDAY() 함수도 있습니다. 두 함수는 인덱스 체계가 서로 다르므로 용도에 맞게 선택해야 합니다.
- DAYOFWEEK(): 일요일 = 1 ~ 토요일 = 7 (ODBC 표준)
- WEEKDAY(): 월요일 = 0 ~ 일요일 = 6
예를 들어 같은 날짜 2018-12-03(월요일)에 대해 DAYOFWEEK()는 2를, WEEKDAY()는 0을 반환합니다. 월요일을 한 주의 시작으로 보는 ISO 8601 방식으로 작업할 때는 WEEKDAY()가 더 편리합니다.