다른 형식의 날짜 이후 레코드 조회하기
테이블에 저장된 날짜가 '21/11/2019'처럼 MySQL의 기본 날짜 형식과 다른 형태라면, 단순 비교만으로는 올바른 결과를 얻을 수 없습니다. 이럴 때 STR_TO_DATE() 함수를 사용하면 문자열 형태의 날짜를 DATE 타입으로 변환한 뒤 원하는 기준 날짜와 비교할 수 있습니다.
1. 테이블 생성
먼저 날짜를 varchar 타입으로 저장하는 테이블을 생성합니다.
mysql> create table DemoTable1808
(
AdmissionDate varchar(20)
);
Query OK, 0 rows affected (0.00 sec)
2. 샘플 데이터 삽입
insert 명령어를 사용해 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable1808 values('21/11/2019');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1808 values('01/01/2018');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1808 values('26/09/2017');
Query OK, 1 row affected (0.00 sec)3. 전체 레코드 확인
select 문으로 테이블의 모든 레코드를 확인합니다.
mysql> select * from DemoTable1808;
실행 결과는 다음과 같습니다.
+---------------+
| AdmissionDate |
+---------------+
| 21/11/2019 |
| 01/01/2018 |
| 26/09/2017 |
+---------------+
3 rows in set (0.00 sec)
4. 특정 날짜 이후의 레코드 조회 쿼리
아래 쿼리는 STR_TO_DATE() 함수에 '%d/%m/%Y' 포맷 지정자를 적용해 문자열을 날짜로 변환한 후, 2018년 12월 31일 이후의 레코드만 조회합니다.
mysql> select * from DemoTable1808
where str_to_date(AdmissionDate,'%d/%m/%Y') > '2018-12-31';
실행 결과는 다음과 같습니다.
+---------------+
| AdmissionDate |
+---------------+
| 21/11/2019 |
+---------------+
1 row in set (0.00 sec)
핵심 정리
포맷 지정자 '%d/%m/%Y'는 순서대로 일(day), 월(month), 연도(year)를 의미합니다. 저장된 날짜 형식에 맞게 포맷 지정자만 조정하면 어떤 형식의 날짜 문자열이든 정확하게 비교할 수 있습니다. 다만 WHERE 절에서 함수를 사용하면 인덱스를 활용하지 못할 수 있으므로, 대량의 데이터를 자주 조회하는 환경이라면 처음부터 날짜를 DATE 타입 컬럼으로 저장하는 것이 성능 면에서 더 유리합니다.