본문 바로가기
데이터 분석/SQL

SQL 날짜/시간 함수 완벽 정리 (MySQL, PostgreSQL, Oracle 비교)

by 데이터한걸음 2026. 3. 8.

데이터 분석에서 시간(Date/Time)은 가장 많이 사용되는 데이터 중 하나입니다.

예를 들어 다음과 같은 질문을 자주 하게 됩니다.

- 오늘 가입한 사용자는 몇 명일까?
- 지난 7일 동안 매출은 얼마나 증가했을까?
- 로그는 몇 시에 가장 많이 발생할까?

이러한 분석을 하기 위해서는
SQL에서 날짜와 시간을 정확하게 다루는 방법을 알아야 합니다.

특히 로그 데이터, 거래 데이터, 사용자 행동 데이터는
대부분 시간 기준으로 저장됩니다.

이번 글에서는 데이터 분석에서 자주 사용하는
날짜/시간 데이터 타입과 함수들을 정리하고

MySQL, PostgreSQL, Oracle 3대 DBMS의
날짜·시간 처리 방법을 비교해보겠습니다.

참고: MySQL 9.5 공식문서 - Date and Time Data Types

 

MySQL :: MySQL 9.5 Reference Manual :: 13.2 Date and Time Data Types

13.2 Date and Time Data Types The date and time data types for representing temporal values are DATE, TIME, DATETIME, TIMESTAMP, and YEAR. Each temporal type has a range of valid values, as well as a “zero” value that may be used when you specify an i

dev.mysql.com

 


1. 날짜/시간 데이터 타입

Data Type 예시 설명
DATE "2025-10-22" 연-월-일
TIME "14:30:00" 시:분:초
DATETIME "2025-10-22 14:30:00" 날짜 + 시간
TIMESTAMP "2025-10-22 14:30:00" UTC로 저장, 표시 시 타임존 변환
YEAR "2025" 연도
  • MySQL
    TIMESTAMP는 자동으로 타임존 변환
  • PostgreSQL
    TIMESTAMP WITH TIME ZONE (timestamptz) 지원
  • Oracle
    DATE 타입에 날짜 + 시간이 모두 포함

DATETIME vs TIMESTAMP 차이

DATETIME
- 입력한 값 그대로 저장
- 타임존 영향 없음

TIMESTAMP
- 내부적으로 UTC로 저장
- 조회 시 서버 타임존으로 변환

예시: 2025-10-22 14:00:00

TIMESTAMP 저장
UTC 기준으로 저장 → 조회 시 변환

그래서 로그 데이터나 이벤트 기록처럼
시간 정확도가 중요한 데이터에는
TIMESTAMP 타입이 많이 사용됩니다.


2. 날짜/시간 데이터 입력 및 추출

현재 시간 관련 함수

-- MySQL / PostgreSQL
SELECT CURRENT_DATE, CURRENT_TIMESTAMP, NOW();

-- Oracle
SELECT SYSDATE, SYSTIMESTAMP FROM DUAL;

문자열 ↔ 날짜 변환

1. 표준 SQL 문법

-- MySQL / PostgreSQL / Oracle
SELECT CAST('2025-10-22' AS DATE); #CAST("문자열" AS 데이터타입)

2. DBMS별 TYPE() 단축 문법

-- MySQL
SELECT DATE('2025-10-22'), TIME('14:30:00'), DATETIME('2025-10-22 14:30:00');

-- PostgreSQL / Oracle
SELECT DATE '2025-10-22', TIMESTAMP '2025-10-22 15:00:00';

3. 커스텀 형식 지정

-- MySQL
SELECT STR_TO_DATE('22-10-2025', '%d-%m-%Y');

-- PostgreSQL / Oracle
SELECT TO_DATE('22-10-2025', 'DD-MM-YYYY');

날짜/시간 단위 추출

-- MySQL
SELECT YEAR(date), MONTH(date), DAY(date), HOUR(time);

-- PostgreSQL / Oracle
SELECT EXTRACT(YEAR FROM CURRENT_TIMESTAMP);

날짜 컬럼에서 연도/월을 추출할 때, 
문자열 함수(substring)를 사용하여 가능하지만 권장되지 않습니다.

날짜 포맷 변환

-- MySQL
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d');

-- PostgreSQL
SELECT TO_CHAR(NOW(), 'YYYY-MM-DD');

-- Oracle
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD');

MySQL DATE_FORMAT() 표

※ DATE_FORMAT()에는 매우 많은 포맷이 있지만
실무에서 가장 많이 사용하는 것은 다음과 같습니다.

Specifier 예시
%Y-%m-%d 2025-10-22
%H:%i:%s 14:30:00
%Y-%m 2025-10
%W Monday
%Y-%m-%d %H:%i:%s 2025-10-22 14:30:00

3. 날짜 연산 (계산하기)

날짜 더하기 / 빼기

-- MySQL
SELECT DATE_ADD(NOW(), INTERVAL 7 DAY);
SELECT DATE_SUB(NOW(), INTERVAL 3 HOUR);

-- PostgreSQL
SELECT CURRENT_DATE + INTERVAL '7 days';

-- Oracle
SELECT SYSDATE + 7 FROM DUAL;

날짜 차이 구하기

-- MySQL
SELECT DATEDIFF('2025-12-31', '2025-10-22'),
	TIMEDIFF('2025-12-31 14:30:00', '2025-12-31 15:30:00');

-- PostgreSQL
SELECT AGE('2025-12-31', '2025-10-22');

-- Oracle
SELECT SYSDATE - TO_DATE('2025-10-22','YYYY-MM-DD') FROM DUAL;

4. 상황별 날짜/시간 관련 유용한 함수

상황 MySQL PostgreSQL  Oracle
분기 추출 QUARTER(date) EXTRACT(QUARTER FROM date) TO_CHAR(date, 'Q')

SQL에서 날짜와 시간은
데이터 분석, 로그 분석, 매출 분석 등에서
가장 많이 사용하는 데이터 유형입니다.

특히 다음 함수들은 실무에서 매우 자주 사용됩니다.

NOW()
DATE_FORMAT()
DATE_ADD()
DATEDIFF()
EXTRACT()

SQL을 활용한 데이터 분석을 한다면 반드시 익혀두는 것이 좋습니다.


참고 자료

MySQL 9.5 공식문서, " Date and Time Data Types", https://dev.mysql.com/doc/refman/9.5/en/date-and-time-types.html

가사키 나카토, 데이터 분석을 위한 SQL 레시피, 윤인성, 한빛미디어,2024, p59-86