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

날짜가 VARCHAR로 저장되어 있을 때 MySQL에서 특정 월 데이터를 필터링하는 방법

날짜가 VARCHAR 타입으로 저장된 경우에도 MySQL에서 특정 월의 데이터를 필터링할 수 있습니다. 이때 STR_TO_DATE() 함수를 사용해 문자열을 날짜 형식으로 변환한 뒤, MONTH() 함수를 함께 사용하면 원하는 월의 데이터만 손쉽게 추출할 수 있습니다.

1. 테이블 생성

먼저 예제에 사용할 테이블을 생성하겠습니다.

mysql> create table DemoTable
-> (
-> DueDate varchar(100)
-> );
Query OK, 0 rows affected (1.18 sec)

2. 데이터 삽입

INSERT 명령어를 사용해 몇 개의 레코드를 삽입합니다.

mysql> insert into DemoTable values('06-19-2019');
Query OK, 1 row affected (0.36 sec)

mysql> insert into DemoTable values('01-31-2018');
Query OK, 1 row affected (0.38 sec)

mysql> insert into DemoTable values('12-01-2016');
Query OK, 1 row affected (0.14 sec)

3. 전체 데이터 확인

SELECT 문으로 테이블의 모든 레코드를 조회합니다.

mysql> select *from DemoTable;

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

+------------+
| DueDate |
+------------+
| 06-19-2019 |
| 01-31-2018 |
| 12-01-2016 |
+------------+
3 rows in set (0.00 sec)

4. 특정 월 필터링 쿼리

날짜가 VARCHAR로 저장된 경우 아래와 같은 쿼리로 특정 월을 필터링할 수 있습니다. STR_TO_DATE() 함수의 두 번째 인자인 '%m-%d-%Y'는 저장된 문자열의 날짜 형식(월-일-연도)을 지정하는 부분입니다.

mysql> select *from DemoTable
-> where month(str_to_date(DueDate, '%m-%d-%Y')) = 06;

위 쿼리는 6월에 해당하는 데이터만 반환합니다. 실행 결과는 다음과 같습니다.

+------------+
| DueDate |
+------------+
| 06-19-2019 |
+------------+
1 row in set (0.00 sec)

포맷 지정자 정리

STR_TO_DATE() 함수는 지정된 포맷 문자열에 따라 문자열을 DATE 타입으로 변환합니다. 자주 사용되는 포맷 지정자는 다음과 같습니다.

  • %m : 두 자리 숫자의 월 (01~12)
  • %d : 두 자리 숫자의 일 (01~31)
  • %Y : 네 자리 숫자의 연도

성능 관련 참고 사항

WHERE 절에서 함수를 사용하면 해당 컬럼의 인덱스를 활용하지 못해 데이터 양이 많을 경우 성능이 저하될 수 있습니다. 따라서 새로운 테이블을 설계할 때는 날짜 값을 가급적 DATE 또는 DATETIME 타입으로 저장하는 것이 좋으며, 기존에 VARCHAR로 저장된 데이터라면 ALTER TABLE을 통해 타입을 변경하는 것을 고려해 볼 만합니다.