MySQL에서 이번 주(현재 주)에 해당하는 데이터를 조회하려면 YEARWEEK() 함수를 사용하면 됩니다. 이 함수는 날짜 값에서 '연도 + 주 번호'를 함께 계산해 주기 때문에, 오늘 날짜와 같은 주에 속한 레코드를 아주 간단하게 필터링할 수 있습니다.
YEARWEEK() 함수 기본 문법
기본적인 사용 방법은 다음과 같습니다.
SELECT *FROM yourTableName WHERE YEARWEEK(yourDateColumnName) = YEARWEEK(NOW());
여기서 NOW()는 현재 날짜와 시간을 반환합니다. 컬럼의 날짜를 YEARWEEK()로 변환한 값이 현재 시점의 연도·주 번호와 일치하면, 그 레코드는 이번 주에 속한 것으로 판단됩니다.
예제 테이블 생성하기
문법을 실제로 이해하기 위해 예제용 테이블을 먼저 만들어 보겠습니다. 테이블 생성 쿼리는 다음과 같습니다.
mysql> create table currentWeekDemo
-> (
-> UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> UserName varchar(20),
-> UserPostDate date
-> );
Query OK, 0 rows affected (0.68 sec)
샘플 데이터 입력하기
insert 명령을 사용해 몇 개의 레코드를 삽입합니다.
mysql> insert into currentWeekDemo(UserName,UserPostDate) values('Carol','2010-01-06');
Query OK, 1 row affected (0.20 sec)
mysql> insert into currentWeekDemo(UserName,UserPostDate) values('Bob','2019-06-04');
Query OK, 1 row affected (0.17 sec)
mysql> insert into currentWeekDemo(UserName,UserPostDate) values('David','2019-03-06');
Query OK, 1 row affected (0.16 sec)
mysql> insert into currentWeekDemo(UserName,UserPostDate) values('Maxwell','2018-04-21');
Query OK, 1 row affected (0.15 sec)전체 레코드 확인하기
select 문으로 테이블에 저장된 모든 레코드를 조회해 보겠습니다.
mysql> select *from currentWeekDemo;
실행 결과는 다음과 같습니다.
+--------+----------+--------------+
| UserId | UserName | UserPostDate |
+--------+----------+--------------+
| 1 | Carol | 2010-01-06 |
| 2 | Bob | 2019-06-04 |
| 3 | David | 2019-03-06 |
| 4 | Maxwell | 2018-04-21 |
+--------+----------+--------------+
4 rows in set (0.00 sec)
이번 주 데이터 조회하기
이제 YEARWEEK() 함수를 활용해 이번 주에 해당하는 데이터를 조회하는 방법은 다음과 같습니다.
mysql> select *from currentWeekDemo WHERE YEARWEEK(UserPostDate) = YEARWEEK(NOW());
실행 결과는 다음과 같습니다.
+--------+----------+--------------+
| UserId | UserName | UserPostDate |
+--------+----------+--------------+
| 3 | David | 2019-03-06 |
+--------+----------+--------------+
1 row in set (0.05 sec)
결과를 보면 현재 날짜와 같은 주에 게시된 David의 레코드 하나만 정확하게 반환된 것을 확인할 수 있습니다.
알아두면 좋은 추가 팁
YEARWEEK() 함수는 선택적으로 mode 인자를 받을 수 있습니다. 예를 들어 YEARWEEK(date, 1)처럼 작성하면 월요일을 한 주의 시작으로 간주합니다. mode를 지정하지 않으면 기본값인 0이 적용되어 일요일이 주의 시작일이 됩니다. 서비스나 리포트의 기준에 맞게 mode 값을 조정하면 더욱 정확한 주 단위 집계가 가능하니 참고하세요.