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

MySQL에서 DATE 문자열과 DATETIME 필드 값 비교하는 방법

MySQL에서 DATE 문자열과 DATETIME 필드 비교하기

MySQL에서는 DATE() 함수를 활용하면 DATE 문자열과 DATETIME 필드에 저장된 값을 손쉽게 비교할 수 있습니다. DATETIME 타입은 날짜와 시간 정보를 함께 담고 있기 때문에, 날짜만 추출해서 비교하려면 DATE() 함수가 필요합니다.

기본 문법

select * from yourTableName where DATE(yourColumnName) = 'anyDateString';

위 문법을 이해하기 위해 실제 테이블을 생성하고 DATETIME 값을 몇 개 삽입한 뒤 비교 쿼리를 실행해 보겠습니다.

1. 테이블 생성

먼저 DATETIME 타입의 컬럼을 가진 테이블을 생성합니다.

mysql> create table DateTimeDemo
   -> (
   -> ArrivalTime datetime
   -> );
Query OK, 0 rows affected (0.61 sec)

2. 데이터 삽입

INSERT 명령어를 사용해 현재 시간(now())과 특정 연도를 더하거나 뺀 날짜 데이터를 여러 건 입력합니다.

mysql> insert into DateTimeDemo values(now());
Query OK, 1 row affected (0.11 sec)

mysql> insert into DateTimeDemo values(date_add(now(),interval 2 year));
Query OK, 1 row affected (0.47 sec)

mysql> insert into DateTimeDemo values(date_add(now(),interval 1 year));
Query OK, 1 row affected (0.19 sec)

mysql> insert into DateTimeDemo values(date_add(now(),interval 4 year));
Query OK, 1 row affected (0.13 sec)

mysql> insert into DateTimeDemo values(date_add(now(),interval -2 year));
Query OK, 1 row affected (0.17 sec)

mysql> insert into DateTimeDemo values(date_add(now(),interval -1 year));
Query OK, 1 row affected (0.17 sec)

3. 전체 데이터 조회

SELECT 문으로 테이블에 저장된 모든 레코드를 확인합니다.

mysql> select *from DateTimeDemo;

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

+---------------------+
| ArrivalTime         |
+---------------------+
| 2018-12-06 10:12:45 |
| 2020-12-06 10:13:10 |
| 2019-12-06 10:13:21 |
| 2022-12-06 10:13:27 |
| 2016-12-06 10:13:42 |
| 2017-12-06 10:13:50 |
+---------------------+
6 rows in set (0.00 sec)

4. DATE() 함수로 문자열 비교

이제 앞서 설명한 문법을 적용하여 DATETIME 필드와 날짜 문자열을 비교해 보겠습니다. DATE() 함수가 DATETIME 값에서 날짜 부분만 추출하기 때문에 '2022-12-06'이라는 문자열과 정확히 일치하는 행만 반환됩니다.

mysql> select *from DateTimeDemo where date(ArrivalTime) = '2022-12-06';

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

+---------------------+
| ArrivalTime         |
+---------------------+
| 2022-12-06 10:13:27 |
+---------------------+
1 row in set (0.14 sec)

참고 사항

DATE() 함수를 WHERE 절에서 사용하면 인덱스를 제대로 활용하지 못해 대용량 테이블에서 성능이 저하될 수 있습니다. 이 경우 다음과 같이 범위 조건으로 작성하는 것이 더 효율적입니다.

select * from DateTimeDemo
where ArrivalTime >= '2022-12-06 00:00:00'
  and ArrivalTime < '2022-12-07 00:00:00';

이 방식은 ArrivalTime 컬럼에 설정된 인덱스를 그대로 활용할 수 있어 조회 속도 면에서 유리합니다.