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

MySQL LIMIT와 ORDER BY로 열에서 정렬된 단일 날짜 값 가져오기

MySQL에서 열에 저장된 여러 날짜 값 중 하나의 날짜만 가져오려면 LIMIT 1을 사용하고, 특정 기준으로 정렬하려면 ORDER BY 절을 함께 활용하면 됩니다. 이 글에서는 문자열 형태로 저장된 날짜를 실제 날짜 값으로 변환해 정렬한 뒤, 가장 앞선 날짜 하나만 조회하는 방법을 예제와 함께 살펴보겠습니다.

1. 테이블 생성하기

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

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

2. 데이터 삽입하기

INSERT 명령을 사용해 몇 개의 날짜 레코드를 삽입합니다.

mysql> insert into DemoTable values('10-06-2019');
Query OK, 1 row affected (0.42 sec)

mysql> insert into DemoTable values('01-12-2016');
Query OK, 1 row affected (0.52 sec)

mysql> insert into DemoTable values('31-01-2018');
Query OK, 1 row affected (0.58 sec)

3. 전체 레코드 확인하기

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

mysql> select *from DemoTable;

출력 결과

위 쿼리는 다음과 같은 결과를 출력합니다.

+------------+
| DueDate |
+------------+
| 10-06-2019 |
| 01-12-2016 |
| 31-01-2018 |
+------------+
3 rows in set (0.00 sec)

4. LIMIT과 ORDER BY로 단일 날짜 조회하기

DueDate 열은 varchar 타입이므로 단순히 ORDER BY를 적용하면 문자열 기준으로 정렬되어 의도하지 않은 결과가 나올 수 있습니다. 따라서 STR_TO_DATE() 함수를 사용해 '%d-%m-%Y'(일-월-년) 형식의 문자열을 실제 DATE 값으로 변환한 뒤 정렬해야 정확한 시간 순서대로 비교할 수 있습니다.

다음은 STR_TO_DATE()로 날짜를 변환해 정렬한 후, LIMIT 1을 통해 가장 빠른 날짜 하나만 가져오는 쿼리입니다.

mysql> select *from DemoTable ORDER BY STR_TO_DATE(DueDate, '%d-%m-%Y') LIMIT 1;

출력 결과

위 쿼리는 다음과 같은 결과를 출력합니다.

+------------+
| DueDate |
+------------+
| 01-12-2016 |
+------------+
1 row in set (0.00 sec)

출력 결과를 보면 세 개의 날짜 중 가장 이른 날짜인 '01-12-2016'이 반환된 것을 확인할 수 있습니다. 반대로 가장 늦은 날짜를 구하고 싶다면 ORDER BY 절 뒤에 DESC 키워드를 추가하면 됩니다. 이처럼 LIMIT과 ORDER BY를 조합하면 최솟값 또는 최댓값에 해당하는 단일 레코드를 손쉽게 조회할 수 있습니다.