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

MySQL에서 날짜 기준 오름차순(ASC) 정렬하는 방법

MySQL에서 날짜 기준 오름차순(ASC) 정렬하기

날짜가 문자열(VARCHAR) 형태로 저장되어 있는 경우, 단순히 ORDER BY 절만 사용하면 의도한 대로 정렬되지 않습니다. 이럴 때 STR_TO_DATE() 함수를 사용하면 문자열을 날짜 형식으로 변환한 뒤 정확하게 정렬할 수 있습니다.

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

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

레코드 삽입

insert 명령을 사용해 테이블에 날짜 데이터를 입력합니다.

mysql> insert into DemoTable values('12-01-2019');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('14-12-2016');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('26-04-2018');
Query OK, 1 row affected (0.34 sec)
mysql> insert into DemoTable values('31-05-2013');
Query OK, 1 row affected (0.30 sec)

저장된 데이터 확인

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

mysql> select * from DemoTable;

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

+---------------+
| AdmissionDate |
+---------------+
| 12-01-2019    |
| 14-12-2016    |
| 26-04-2018    |
| 31-05-2013    |
+---------------+
4 rows in set (0.00 sec)

날짜 오름차순 정렬 쿼리

다음은 STR_TO_DATE() 함수를 활용해 날짜를 기준으로 오름차순(ASC) 정렬하는 쿼리입니다. '%d-%m-%Y' 형식 지정자를 사용하여 '일-월-년' 순서의 문자열을 날짜 값으로 변환합니다.

mysql> select *from DemoTable ORDER BY STR_TO_DATE(AdmissionDate,'%d-%m-%Y') ASC;

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

+---------------+
| AdmissionDate |
+---------------+
| 31-05-2013    |
| 14-12-2016    |
| 26-04-2018    |
| 12-01-2019    |
+---------------+
4 rows in set (0.00 sec)

위 결과를 보면 날짜가 2013년부터 2019년까지 시간순으로 올바르게 정렬된 것을 확인할 수 있습니다. 참고로, 날짜 데이터를 자주 정렬하거나 조건으로 필터링해야 하는 경우라면 처음부터 DATE 타입으로 컬럼을 설계하는 것이 성능과 관리 측면에서 훨씬 유리합니다.