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

MySQL에서 DATEPART()로 행을 조회하는 방법 – MONTH() 함수 활용하기

MySQL에는 DATEPART() 함수가 없습니다

SQL Server에서 제공하는 DATEPART() 함수는 MySQL에 존재하지 않습니다. MySQL에서 날짜 컬럼으로부터 월 정보를 추출하려면 MONTH() 함수를 사용해야 합니다.

기본 문법은 다음과 같습니다:

SELECT * FROM yourTableName
WHERE MONTH(yourDateColumnName) = yourValue;

예제 테이블 생성하기

문법을 실제로 이해하기 위해 테이블을 하나 생성해 보겠습니다. 테이블 생성 쿼리는 다음과 같습니다:

mysql> create table SelectRowFromDatePart
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> LoginDate date,
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (2.42 sec)

샘플 데이터 삽입하기

이제 INSERT 명령을 사용해 테이블에 여러 날짜 레코드를 삽입합니다. 현재 날짜를 반환하는 curdate(), 특정 기간을 더하거나 빼는 date_add() 함수도 함께 활용했습니다.

mysql> insert into SelectRowFromDatePart(LoginDate) values(curdate());
Query OK, 1 row affected (0.21 sec)
mysql> insert into SelectRowFromDatePart(LoginDate) values(date_add(curdate(),interval -3 year));
Query OK, 1 row affected (0.19 sec)
mysql> insert into SelectRowFromDatePart(LoginDate) values('2014-05-21');
Query OK, 1 row affected (0.21 sec)
mysql> insert into SelectRowFromDatePart(LoginDate) values('2015-08-25');
Query OK, 1 row affected (0.23 sec)
mysql> insert into SelectRowFromDatePart(LoginDate) values('2018-12-31');
Query OK, 1 row affected (0.18 sec)
mysql> insert into SelectRowFromDatePart(LoginDate) values('2011-12-21');
Query OK, 1 row affected (0.21 sec)
mysql> insert into SelectRowFromDatePart(LoginDate) values('2013-10-02');
Query OK, 1 row affected (0.12 sec)
mysql> insert into SelectRowFromDatePart(LoginDate) values('2006-12-11');
Query OK, 1 row affected (0.17 sec)
mysql> insert into SelectRowFromDatePart(LoginDate) values('2010-03-09');
Query OK, 1 row affected (0.40 sec)
mysql> insert into SelectRowFromDatePart(LoginDate) values('2012-12-12');
Query OK, 1 row affected (0.70 sec)

저장된 전체 데이터 확인하기

SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select *from SelectRowFromDatePart;

실행 결과는 다음과 같습니다:

+----+------------+
| Id | LoginDate |
+----+------------+
| 1 | 2019-01-31 |
| 2 | 2016-01-31 |
| 3 | 2014-05-21 |
| 4 | 2015-08-25 |
| 5 | 2018-12-31 |
| 6 | 2011-12-21 |
| 7 | 2013-10-02 |
| 8 | 2006-12-11 |
| 9 | 2010-03-09 |
| 10 | 2012-12-12 |
+----+------------+
10 rows in set (0.00 sec)

MONTH() 함수로 특정 월의 행 조회하기

DATEPART() 역할을 대신하는 MONTH() 함수를 사용해, 로그인 날짜가 12월인 행만 조회하는 쿼리입니다:

mysql> select *from SelectRowFromDatePart where MONTH(LoginDate)=12;

실행 결과는 다음과 같습니다:

+----+------------+
| Id | LoginDate |
+----+------------+
| 5 | 2018-12-31 |
| 6 | 2011-12-21 |
| 8 | 2006-12-11 |
| 10 | 2012-12-12 |
+----+------------+
4 rows in set (0.00 sec)

결과를 보면 연도와 상관없이 LoginDate의 월이 12월인 행 4개만 정확히 필터링되어 반환된 것을 확인할 수 있습니다. 이처럼 MySQL에서는 DATEPART() 대신 MONTH(), YEAR(), DAY() 등의 함수를 조합하여 원하는 날짜 단위의 데이터를 손쉽게 조회할 수 있습니다.