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

MySQL에서 Oracle의 trunc(sysdate)처럼 날짜 부분만 추출하는 방법

네, 가능합니다. MySQL에서는 DATE() 함수를 사용해 datetime 값에서 날짜 부분만 추출할 수 있고, CURDATE() 함수를 사용하면 현재 날짜를 손쉽게 가져올 수 있습니다. 이 두 함수를 조합하면 Oracle의 trunc(sysdate)와 동일한 효과를 얻을 수 있습니다.

1. 현재 날짜 확인하기

먼저 CURDATE() 함수로 현재 날짜를 확인해 보겠습니다.

mysql> select curdate();
+------------+
| curdate()  |
+------------+
| 2019-10-20 |
+------------+
1 row in set (0.00 sec)

2. 예제 테이블 생성하기

테스트를 위해 datetime 타입의 컬럼을 가진 테이블을 생성합니다.

mysql> create table DemoTable1613
    -> (
    -> PostingDate datetime
    -> );
Query OK, 0 rows affected (0.48 sec)

insert 명령어를 사용해 몇 개의 레코드를 삽입합니다.

mysql> insert into DemoTable1613 values('2019-10-20 12:02:45');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable1613 values('2018-10-20 12:02:45');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1613 values('2015-10-20 12:02:45');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1613 values('2019-10-20 10:00:00');
Query OK, 1 row affected (0.22 sec)

3. 전체 레코드 조회하기

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

mysql> select * from DemoTable1613;

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

+---------------------+
| PostingDate         |
+---------------------+
| 2019-10-20 12:02:45 |
| 2018-10-20 12:02:45 |
| 2015-10-20 12:02:45 |
| 2019-10-20 10:00:00 |
+---------------------+
4 rows in set (0.00 sec)

4. trunc(sysdate)와 유사한 쿼리 작성하기

아래 쿼리는 DATE() 함수로 PostingDate 컬럼에서 시간 정보를 제거한 값과 CURDATE()로 구한 오늘 날짜를 비교하여, 오늘 날짜에 해당하는 레코드만 조회합니다.

mysql> select * from DemoTable1613 where date(PostingDate)=curdate();

실행 결과를 보면 2019-10-20 날짜의 두 레코드만 정확히 필터링되어 반환된 것을 확인할 수 있습니다.

+---------------------+
| PostingDate         |
+---------------------+
| 2019-10-20 12:02:45 |
| 2019-10-20 10:00:00 |
+---------------------+
2 rows in set (0.00 sec)

추가 팁

성능 최적화 관점에서 한 가지 참고할 점이 있습니다. 위 방식은 컬럼에 함수를 적용하기 때문에 인덱스가 있어도 제대로 활용되지 않을 수 있습니다. 대량의 데이터를 다룰 때는 아래와 같이 범위 조건을 사용하는 것이 더 효율적입니다.

mysql> select * from DemoTable1613 
    where PostingDate >= curdate() 
      and PostingDate < curdate() + interval 1 day;

이 방법은 컬럼 자체를 그대로 비교하므로 인덱스를 활용할 수 있어 대용량 테이블에서 조회 성능이 크게 향상됩니다.