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

MySQL CURDATE()와 NOW() 함수 차이점 완벽 정리

MySQL CURDATE()와 NOW() 함수란?

MySQL에서 날짜와 시간을 다룰 때 가장 많이 사용되는 두 가지 함수가 바로 NOW()CURDATE()입니다. 이 두 함수는 비슷해 보이지만 명확한 차이가 있습니다.

NOW() 함수는 현재 날짜와 시간을 모두 타임스탬프 형태로 반환하는 반면, CURDATE() 함수는 시간 정보 없이 오직 현재 날짜만 반환합니다.

NOW() 함수 사용 예제

SELECT 문을 활용해 두 함수를 직접 확인해 보겠습니다. 먼저 NOW() 함수의 동작 예시입니다.

mysql> select NOW();

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

+---------------------+
|             now() |
+---------------------+
| 2018-11-27 15:17:01 |
+---------------------+
1 row in set (0.00 sec)

출력 결과에서 볼 수 있듯이 NOW() 함수는 'YYYY-MM-DD HH:MM:SS' 형식으로 날짜와 시간을 함께 반환합니다.

CURDATE() 함수 사용 예제

이번에는 CURDATE() 함수를 실행해 보겠습니다.

mysql> select CURDATE();

CURDATE()는 시간 정보를 제외한 날짜만 출력합니다.

+------------+
| curdate() |
+------------+
| 2018-11-27 |
+------------+
1 row in set (0.00 sec)

테이블을 활용한 실전 비교

두 함수의 차이를 더 명확하게 이해하기 위해 실제 테이블을 생성하고 데이터를 삽입해 보겠습니다. 먼저 datetime 타입의 컬럼을 가진 테이블을 만듭니다.

mysql> create table CurrentdateAndNowDemo
-> (
   -> Time datetime
-> );
Query OK, 0 rows affected (0.82 sec)

이제 NOW() 함수와 CURDATE() 함수를 각각 사용하여 레코드를 삽입합니다.

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

mysql> insert into CurrentdateAndNowDemo values(curdate());
Query OK, 1 row affected (0.14 sec)

삽입된 데이터를 조회하여 NOW()가 현재 날짜와 시간을 반환하는지, 그리고 CURDATE()가 현재 날짜만 반환하는지 확인해 보겠습니다.

mysql> select *from CurrentdateAndNowDemo;

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

+---------------------+
|                Time |
+---------------------+
| 2018-11-27 15:16:32 |
| 2018-11-27 00:00:00 |
+---------------------+
2 rows in set (0.00 sec)

결과 분석 및 핵심 정리

위 결과를 보면 흥미로운 점을 발견할 수 있습니다. datetime 타입 컬럼에 CURDATE()로 삽입된 값은 시간 부분이 자동으로 00:00:00으로 채워진 것을 확인할 수 있습니다.

  • NOW(): 현재 날짜와 시간을 함께 반환 (예: 2018-11-27 15:16:32)
  • CURDATE(): 현재 날짜만 반환하며, datetime 컬럼에 저장될 경우 시간은 00:00:00으로 처리됨

따라서 게시글 작성 시각처럼 정확한 시간 정보가 필요하다면 NOW()를, 생일이나 등록일처럼 날짜 정보만 필요하다면 CURDATE()를 사용하는 것이 적절합니다. 참고로 CURDATE()는 CURRENT_DATE 또는 CURRENT_DATE()로도 동일하게 사용할 수 있으며, NOW() 역시 CURRENT_TIMESTAMP 또는 LOCALTIME()으로 대체 가능합니다.