Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL DAYOFWEEK() 함수로 요일 번호(주 인덱스) 구하는 방법

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()가 더 편리합니다.