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

날짜가 VARCHAR 형식일 때 MySQL에서 특정 레코드를 선택하는 방법

날짜 값이 VARCHAR 형식으로 저장되어 있어도 STR_TO_DATE() 함수를 사용하면 문자열을 날짜로 변환하여 원하는 레코드를 정확하게 조회할 수 있습니다. 이번 글에서는 실제 예제를 통해 그 방법을 단계별로 살펴보겠습니다.

1. 테이블 생성하기

먼저 날짜를 VARCHAR 타입으로 저장하는 테이블을 생성합니다.

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

2. 샘플 데이터 삽입하기

INSERT 문을 사용해 'DD-MON-YYYY' 형식의 날짜 문자열 몇 개를 입력합니다.

mysql> insert into DemoTable values('12-AUG-2016');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('14-AUG-2018');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('24-AUG-2012');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('14-AUG-2012');
Query OK, 1 row affected (0.19 sec)

3. 전체 데이터 확인하기

SELECT 문으로 테이블에 저장된 모든 레코드를 조회해 보겠습니다.

mysql> select *from DemoTable;

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

+-------------+
| DueDate     |
+-------------+
| 12-AUG-2016 |
| 14-AUG-2018 |
| 24-AUG-2012 |
| 14-AUG-2012 |
+-------------+
4 rows in set (0.00 sec)

4. STR_TO_DATE()로 특정 날짜의 레코드 선택하기

VARCHAR 형식의 날짜에서 특정 레코드를 조회하려면 STR_TO_DATE() 함수를 사용해 문자열을 DATE 타입으로 변환한 뒤 비교하면 됩니다. 아래 쿼리는 '14-AUG-2012'에 해당하는 레코드만 가져옵니다.

mysql> select *from DemoTable where str_to_date(DueDate,'%d-%M-%Y')=str_to_date('14-AUG-2012','%d-%M-%Y');

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

+-------------+
| DueDate     |
+-------------+
| 14-AUG-2012 |
+-------------+
1 row in set (0.00 sec)

포맷 지정자 설명

  • %d : 일(01~31)을 나타냅니다.
  • %M : 월 이름(예: August)을 나타냅니다.
  • %Y : 4자리 연도를 나타냅니다.

이처럼 저장된 문자열의 형식에 맞는 포맷 지정자를 지정해 주기만 하면, VARCHAR로 저장된 날짜라도 DATE처럼 비교하고 조회할 수 있습니다. 다만 대량의 데이터를 자주 검색해야 한다면, 인덱스 활용과 성능을 고려해 처음부터 DATE 또는 DATETIME 타입으로 컬럼을 설계하는 것이 좋습니다.