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

MySQL에서 VARCHAR형 날짜 문자열 목록의 최대(최신) 날짜 구하기

MySQL에서 날짜가 VARCHAR 타입으로 저장되어 있으면 단순히 MAX() 함수만으로는 올바른 최대 날짜를 구할 수 없습니다. 이럴 때는 STR_TO_DATE() 함수로 문자열을 먼저 날짜로 변환한 뒤 집계해야 합니다. 아래 예제와 함께 살펴보겠습니다.

1. 테이블 생성

먼저 날짜를 varchar 컬럼에 저장할 테이블을 생성합니다.

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

2. 샘플 데이터 삽입

insert 문을 사용해 '요일, 일 월 연도' 형식의 날짜 문자열을 여러 건 입력합니다.

mysql> insert into DemoTable values('Sunday, 11 August 2019');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('Friday, 18 October 2019');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('Thursday, 18 July 2019');
Query OK, 1 row affected (0.23 sec)

3. 데이터 확인

select 문으로 테이블의 전체 레코드를 조회해 보겠습니다.

mysql> select *from DemoTable;

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

+-------------------------+
| AdmissionDate           |
+-------------------------+
| Sunday, 11 August 2019  |
| Friday, 18 October 2019 |
| Thursday, 18 July 2019  |
+-------------------------+
3 rows in set (0.00 sec)

4. VARCHAR 날짜에서 최대 날짜 구하기

위에서 저장한 varchar 날짜 목록에서 최대(가장 늦은) 날짜를 구하는 쿼리는 다음과 같습니다.

mysql> select max(str_to_date(AdmissionDate,'%W, %d %M %Y')) AS MaxDate from DemoTable;

실행 결과:

+------------+
| MaxDate    |
+------------+
| 2019-10-18 |
+------------+
1 row in set (0.04 sec)

쿼리 설명

  • STR_TO_DATE(컬럼, 포맷): 문자열을 지정한 형식에 맞춰 DATE 값으로 변환합니다.
  • %W: 요일 이름(Sunday, Monday 등)
  • %d: 일(01~31)
  • %M: 월 이름(January, February 등)
  • %Y: 4자리 연도

즉, 'Friday, 18 October 2019' 같은 문자열이 STR_TO_DATE()를 통해 '2019-10-18' 형태의 실제 날짜로 변환된 후, MAX() 함수가 그중 가장 큰(늦은) 날짜를 반환하는 원리입니다.

참고 사항

날짜 데이터는 가능하면 DATE 또는 DATETIME 타입으로 저장하는 것이 좋습니다. varchar로 저장하면 매번 변환 비용이 발생하고 인덱스 활용도 어려워 성능이 떨어질 수 있습니다. 기존 데이터를 마이그레이션할 때는 ALTER TABLE ... MODIFY와 함께 STR_TO_DATE()를 활용하면 됩니다.