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

MySQL에서 VARCHAR로 저장된 날짜에 SELECT 조건 적용하기 – STR_TO_DATE 함수 활용법

VARCHAR로 저장된 날짜에 MySQL SELECT 수행하기

MySQL에서 날짜 데이터가 VARCHAR 타입으로 저장되어 있는 경우, 일반적인 날짜 비교 연산을 바로 수행할 수 없습니다. 이럴 때 STR_TO_DATE() 함수를 사용하면 문자열 형태의 날짜를 실제 DATE 값으로 변환하여 조건 비교를 할 수 있습니다. 아래 예제를 통해 전체 과정을 살펴보겠습니다.

1. 테이블 생성

먼저 데모용 테이블을 생성합니다.

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

2. 레코드 삽입

insert 명령을 사용하여 날짜 문자열을 테이블에 삽입합니다.

mysql> insert into DemoTable values('21/10/2018');
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable values('18/08/2019');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('01/12/2012');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values('31/01/2016');
Query OK, 1 row affected (0.19 sec)

3. 전체 레코드 조회

select 문으로 테이블의 모든 레코드를 확인합니다.

mysql> select *from DemoTable;

다음과 같은 결과가 출력됩니다.

+------------+
| DueDate    |
+------------+
| 21/10/2018 |
| 18/08/2019 |
| 01/12/2012 |
| 31/01/2016 |
+------------+
4 rows in set (0.00 sec)

4. VARCHAR 날짜에 조건부 SELECT 적용

다음은 VARCHAR로 저장된 날짜 컬럼에 SELECT 조건을 적용하는 쿼리입니다. STR_TO_DATE() 함수와 포맷 지정자 '%d/%m/%Y'(일/월/년 순서)를 사용해 문자열을 날짜로 변환한 뒤, 2010-01-31 이후의 모든 날짜 레코드를 조회합니다.

mysql> select *from DemoTable where str_to_date(DueDate,'%d/%m/%Y') > '2010-01-31';

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

+------------+
| DueDate    |
+------------+
| 21/10/2018 |
| 18/08/2019 |
| 01/12/2012 |
| 31/01/2016 |
+------------+
4 rows in set (0.00 sec)

주요 포맷 지정자 정리

  • %d — 일(01~31)
  • %m — 월(01~12)
  • %Y — 4자리 연도

저장된 날짜 문자열의 실제 형식에 맞게 포맷 지정자를 조정해야 올바른 변환 결과를 얻을 수 있습니다. 참고로 WHERE 절에서 컬럼에 함수를 적용하면 인덱스를 활용하기 어려워 성능이 저하될 수 있으므로, 대량의 데이터를 다루는 경우에는 처음부터 DATE 타입으로 컬럼을 설계하는 것이 좋습니다.