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

MySQL에서 입학일(AdmissionDate)이 현재 날짜보다 이전인 레코드 조회하는 방법

날짜가 varchar 타입으로 저장되어 있어도 STR_TO_DATE() 함수를 활용하면 손쉽게 날짜 비교가 가능합니다. 이번 글에서는 입학일(AdmissionDate)이 현재 날짜보다 이전인 레코드만 조회하는 방법을 단계별로 살펴보겠습니다.

1. 테이블 생성하기

먼저 예제에 사용할 테이블을 생성합니다.

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

참고: 현재 날짜가 2019년 9월 14일이라고 가정합니다.

2. 샘플 데이터 삽입하기

INSERT 문을 사용해 여러 개의 날짜 데이터를 입력합니다.

mysql> insert into DemoTable values('15-Sep-2019');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values('14-Sep-2019');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('13-Sep-2016');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('13-Sep-2019');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('13-Sep-2020');
Query OK, 1 row affected (0.10 sec)

3. 전체 데이터 확인하기

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

mysql> select *from DemoTable;

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

+---------------+
| AdmissionDate |
+---------------+
| 15-Sep-2019   |
| 14-Sep-2019   |
| 13-Sep-2016   |
| 13-Sep-2019   |
| 13-Sep-2020   |
+---------------+
5 rows in set (0.00 sec)

4. 현재 날짜보다 이전인 입학일 조회하기

문자열로 저장된 날짜는 그대로 비교할 수 없으므로, STR_TO_DATE() 함수로 DATE 타입으로 변환한 뒤 CURDATE()와 비교해야 합니다.

mysql> select *from DemoTable where str_to_date(AdmissionDate,'%d-%b-%Y') < CURDATE();

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

+---------------+
| AdmissionDate |
+---------------+
| 13-Sep-2016   |
| 13-Sep-2019   |
+---------------+
2 rows in set (0.00 sec)

결과 분석 및 핵심 포인트

현재 날짜가 2019년 9월 14일이므로, 그보다 이전인 '13-Sep-2016'과 '13-Sep-2019' 두 건만 조회되었습니다. 나머지 날짜는 오늘 또는 미래의 날짜이기 때문에 결과에서 제외됩니다.

여기서 사용된 형식 지정자는 다음과 같습니다.

  • %d: 일(day), 두 자리 숫자 (예: 13)
  • %b: 축약된 월 이름 (예: Sep)
  • %Y: 네 자리 연도 (예: 2019)

저장된 날짜 형식에 맞게 형식 지정자를 조정하면 어떤 문자열 날짜든 정확하게 비교할 수 있습니다. 참고로, 실무에서는 날짜를 처음부터 DATE 타입 컬럼에 저장하는 것이 인덱스 활용과 성능 면에서 훨씬 유리하다는 점도 기억해 두시기 바랍니다.