📅 SQL에서 DATE, DATETIME, TIMESTAMP 완전 정복 (MySQL)

2025. 5. 15. 15:25·DB/SQL

이게 도대체 뭐가 다른 거야? 🤯
MySQL을 쓰다 보면 DATE, DATETIME, TIMESTAMP 중 어떤 걸 써야 할지 헷갈릴 때가 많다.
오늘은 이 세 가지 타입의 차이점과 특징, 변환 방식, 실전 사용 팁까지 모두 정리해보자.

 


 

✅ 1. 기본 정의

자료형 설명 저장 범위 시간 포함 여부 타임존 영향
DATE 날짜만 저장 1000-01-01 ~
9999-12-31
❌ (시간 없음) ❌
DATETIME 날짜 + 시간 저장 1000-01-01 00:00:00 ~
9999-12-31 23:59:59
✅ ❌
TIMESTAMP 날짜 + 시간 저장 (UNIX 기반) 1970-01-01 00:00:01 UTC ~
2038-01-19 03:14:07 UTC
✅ ✅ (타임존 영향 받음)

 

💡 핵심 정리

 

  • DATE: 연/월/일만 필요할 때
  • DATETIME: 연/월/일/시간/분/초를 저장하되, 타임존에 민감하지 않은 절대 시간
  • TIMESTAMP: UTC 기준 상대 시간이며, 타임존에 따라 값이 변할 수 있음

 


 

🕐 2. 저장 예시 및 출력 형태

-- DATE
INSERT INTO table (col) VALUES ('2024-05-15');

-- DATETIME
INSERT INTO table (col) VALUES ('2024-05-15 14:30:00');

-- TIMESTAMP
INSERT INTO table (col) VALUES (CURRENT_TIMESTAMP);
타입 저장 값 출력 형태
DATE 2024-05-15 ‘YYYY-MM-DD’
DATETIME 2024-05-15 14:30:00 ‘YYYY-MM-DD HH:MM:SS’
TIMESTAMP 2024-05-15 14:30:00 ‘YYYY-MM-DD HH:MM:SS’ (시스템 타임존 기준 변동 가능)

 


 

🌍 3. 타임존(Timezone) 차이

 

 

DATETIME은 타임존을 무시

 

→ 그냥 문자처럼 시간 정보를 저장함. MySQL 서버의 타임존이 바뀌어도 값은 그대로.

 

 

TIMESTAMP는 타임존 영향을 받음

 

→ 내부적으로 UTC로 저장되고, 서버나 세션 타임존 설정에 따라 출력 값이 바뀔 수 있음

-- 타임존 확인
SELECT @@global.time_zone, @@session.time_zone;

-- 타임존 변경
SET time_zone = '+09:00';

 

❗ 주의: 타임존이 중요한 글로벌 서비스라면 

TIMESTAMP + UTC로 통일하는 게 안정적이다!

 


 

🔁 4. 변환(형 변환) 방법

 

 

DATE <–> DATETIME

-- DATE → DATETIME
SELECT CAST('2024-05-15' AS DATETIME);  
-- 결과: 2024-05-15 00:00:00

-- DATETIME → DATE
SELECT DATE('2024-05-15 13:45:00');     
-- 결과: 2024-05-15

 

DATETIME ↔ TIMESTAMP

-- DATETIME → TIMESTAMP (타임존 고려)
SELECT CONVERT_TZ('2024-05-15 13:45:00', '+00:00', '+09:00');

-- TIMESTAMP → DATETIME (단순 출력은 같지만 내부 로직 다름)
SELECT CAST(NOW() AS DATETIME);

 


 

📊 5. 날짜 추출 함수 활용법

함수 설명 예시
YEAR(col) 연도 추출 YEAR(created_at) → 2025
MONTH(col) 월 추출 MONTH(created_at) → 5
DAY(col) 일 추출 DAY(created_at) → 15
DATE(col) 날짜만 추출 (시간 제거) DATE(created_at) → ‘2025-05-15’
TIME(col) 시간만 추출 TIME(created_at) → ‘14:30:00’

✅ DATE, DATETIME, TIMESTAMP 모두 추출 가능!

→ 하지만 DATE에는 TIME() 쓰면 NULL!

 


 

🧠 6. 언제 어떤 타입을 써야 할까?

상황 추천 타입 이유
생일, 기념일 저장 DATE 시간 필요 없음
주문 시간, 결제 시간 DATETIME 시간은 중요하지만 타임존 고려하지 않음
로그인 기록, 글로벌 트래픽 기록 TIMESTAMP UTC 기반, 타임존 계산이 정확함

 


 

🔐 보너스: 자동 입력 타임스탬프 설정

-- created_at: 삽입 시 자동 입력
-- updated_at: 수정 시 자동 갱신
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

 


 

🧾 정리 한 줄 요약!

타입 날짜 시간 타임존 영향 추천 사용처
DATE ✅ ❌ ❌ 생일, 단순 날짜
DATETIME ✅ ✅ ❌ 주문 기록, 예약 시스템
TIMESTAMP ✅ ✅ ✅ 로그인 로그, 서버 트래픽, 글로벌 앱

 


이제 더 이상 DATE, DATETIME, TIMESTAMP에서 헤매지 말자!

 

 

'DB > SQL' 카테고리의 다른 글

SQL - 20250604  (1) 2025.06.04
SQL - 20250515  (2) 2025.05.15
SQL - 20250514  (0) 2025.05.14
SQL - 20250513  (2) 2025.05.13
SQL - 20250508  (0) 2025.05.08
'DB/SQL' 카테고리의 다른 글
  • SQL - 20250604
  • SQL - 20250515
  • SQL - 20250514
  • SQL - 20250513
Geisha
Geisha
개발 일기
  • Geisha
    Geisha
    Geisha
  • 전체
    오늘
    어제
    • 분류 전체보기 (331) N
      • Algorithm & Data Structures (249)
        • BOJ (107)
        • SWEA (1)
        • Programers (137)
        • Data Structures (3)
      • DB (29) N
        • SQL (23) N
        • RDBMS (2)
      • Java (1)
        • Class (1)
      • Spring (5)
        • Spring MVC (1)
        • Annotations (1)
      • CS (36)
        • 운영체제 (13)
        • 네트워크 (5)
      • Tool (6)
        • Git (5)
        • AWS (1)
      • Project (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Java
    유니온파인드
    algorithm
    동적계획법
    프로그래머스
    programmers
    dp
    골드
    스택
    binarySearch
    baekjoon
    Dijkstra
    BFS
    이분탐색
    DynamicProgramming
    Union-Find
    후위순회
    PriorityQueue
    dfs
    구현
    Stack
    경로압축
    백준
    자바
    전위순회
    SQL
    알고리즘
    투포인터
    백트래킹
    다익스트라
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
Geisha
📅 SQL에서 DATE, DATETIME, TIMESTAMP 완전 정복 (MySQL)
상단으로

티스토리툴바