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

MySQL에서 날짜 문자열 비교하기: STR_TO_DATE() 함수 완벽 가이드

MySQL에서 날짜가 문자열(varchar) 형태로 저장되어 있을 때는 단순 문자열 비교만으로는 올바른 결과를 얻기 어렵습니다. 이럴 때 STR_TO_DATE() 함수를 사용하면 문자열을 날짜 형식으로 변환한 뒤 정확하게 비교할 수 있습니다.

STR_TO_DATE()란?

STR_TO_DATE()는 지정한 형식에 맞춰 문자열을 DATE 타입으로 변환해 주는 MySQL 내장 함수입니다. 날짜 데이터를 텍스트로 저장한 컬럼을 다룰 때 특히 유용합니다.

예제 테이블 생성

먼저 실습용 테이블을 생성하겠습니다. 날짜를 varchar 타입으로 저장하는 것이 핵심 포인트입니다.

mysql> create table DemoTable712 (
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    ArrivalDate varchar(100)
);
Query OK, 0 rows affected (0.65 sec)

샘플 데이터 삽입

'일.월.연도' 형식(예: 10.01.2019)의 날짜 문자열을 여러 건 삽입합니다.

mysql> insert into DemoTable712(ArrivalDate) values('10.01.2019');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable712(ArrivalDate) values('11.12.2018');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable712(ArrivalDate) values('01.11.2017');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable712(ArrivalDate) values('20.06.2016');
Query OK, 1 row affected (0.23 sec)

저장된 데이터 확인

SELECT 문으로 전체 레코드를 조회해 보겠습니다.

mysql> select *from DemoTable712;

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

+----+-------------+
| Id | ArrivalDate |
+----+-------------+
| 1  | 10.01.2019  |
| 2  | 11.12.2018  |
| 3  | 01.11.2017  |
| 4  | 20.06.2016  |
+----+-------------+
4 rows in set (0.00 sec)

날짜 문자열 비교 쿼리

이제 STR_TO_DATE()를 사용해 특정 날짜와 일치하는 레코드를 조회해 보겠습니다. 저장된 형식이 '일.월.연도'이므로 %d.%m.%Y 포맷을 지정합니다.

mysql> select *from DemoTable712 
where str_to_date(ArrivalDate,'%d.%m.%Y')='2017-11-01';

실행 결과:

+----+-------------+
| Id | ArrivalDate |
+----+-------------+
| 3  | 01.11.2017  |
+----+-------------+
1 row in set (0.00 sec)

포맷 지정자 정리

쿼리에 사용된 주요 포맷 지정자는 다음과 같습니다.

  • %d — 일(day), 두 자리 숫자 (01~31)
  • %m — 월(month), 두 자리 숫자 (01~12)
  • %Y — 연도(year), 네 자리 숫자 (예: 2019)

주의 사항

날짜 문자열을 직접 비교하면 '01.11.2017'과 같은 값은 문자 기준으로 해석되어 의도하지 않은 결과가 나올 수 있습니다. 반드시 STR_TO_DATE()로 변환한 후 비교해야 정확한 날짜 연산이 가능합니다. 또한 대량의 데이터를 조회할 경우 변환 함수 사용으로 인덱스를 활용하지 못할 수 있으므로, 성능이 중요하다면 처음부터 DATE 타입 컬럼을 사용하는 것이 좋습니다.