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

MySQL에서 VARCHAR 날짜와 현재 날짜 비교하기 – STR_TO_DATE() 완벽 가이드

MySQL에서 날짜가 VARCHAR 타입으로 저장되어 있을 때, 이를 현재 날짜(CURDATE())와 비교하려면 STR_TO_DATE() 함수를 사용하면 됩니다. 문자열로 저장된 날짜를 실제 DATE 타입으로 변환한 후 비교 연산을 수행하는 방식입니다.

기본 문법

select * from yourTableName
where str_to_date(yourColumnName,'yourFormatSpecifier') > curdate();

예제 테이블 생성

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

mysql> create table DemoTable1397
    -> (
    -> AdmissionDate varchar(40)
    -> );
Query OK, 0 rows affected (0.97 sec)

다음으로 INSERT 문을 사용해 몇 개의 레코드를 삽입합니다.

mysql> insert into DemoTable1397 values('01/04/2019');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1397 values('27/09/2019');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1397 values('29/09/2018');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1397 values('29/09/2019');
Query OK, 1 row affected (0.08 sec)

저장된 데이터 확인

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

mysql> select * from DemoTable1397;

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

+---------------+
| AdmissionDate |
+---------------+
| 01/04/2019    |
| 27/09/2019    |
| 29/09/2018    |
| 29/09/2019    |
+---------------+
4 rows in set (0.00 sec)

현재 날짜 확인

비교 기준이 될 현재 날짜를 먼저 확인해 보겠습니다.

mysql> select curdate();
+------------+
| curdate()  |
+------------+
| 2019-09-27 |
+------------+
1 row in set (0.00 sec)

VARCHAR 날짜와 현재 날짜 비교 쿼리

이제 STR_TO_DATE() 함수를 사용하여 문자열 형태의 날짜를 DATE 타입으로 변환하고, 현재 날짜보다 큰(미래의) 레코드만 조회하는 쿼리를 작성합니다. 여기서는 날짜가 '일/월/년' 형식으로 저장되어 있으므로 포맷 지정자로 '%d/%m/%Y'를 사용합니다.

mysql> select * from DemoTable1397
    -> where str_to_date(AdmissionDate,'%d/%m/%Y') > curdate();

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

+---------------+
| AdmissionDate |
+---------------+
| 29/09/2019    |
+---------------+
1 row in set (0.07 sec)

결과 분석

현재 날짜가 2019-09-27이므로, 그 이후의 날짜인 '29/09/2019' 레코드 하나만 조회된 것을 확인할 수 있습니다. '29/09/2018'은 과거 날짜이고, '01/04/2019'와 '27/09/2019'는 현재 날짜와 같거나 이전이므로 결과에서 제외됩니다.

주요 포맷 지정자 참고

  • %d : 일 (01~31)
  • %m : 월 (01~12)
  • %Y : 4자리 연도 (예: 2019)
  • %y : 2자리 연도 (예: 19)

팁: 날짜 데이터는 가능하면 DATE 또는 DATETIME 타입으로 저장하는 것이 좋습니다. VARCHAR로 저장하면 인덱스 활용이 어렵고, 매번 STR_TO_DATE()로 변환해야 하므로 대량 데이터 조회 시 성능 저하가 발생할 수 있습니다.