2 분 소요

SQL에서는 날짜와 시간 데이터를 정확하게 저장하고 처리하기 위해 다양한 전용 타입을 제공합니다. 이 글에서는 각 날짜/시간 타입의 특징, 사용법, 범위, 예제를 한눈에 보기 쉽게 정리했습니다.


1. 날짜와 시간 타입 종류 및 특징

✅ DATE: 날짜만 저장

  • 형식: 'YYYY-MM-DD'
  • 범위: '1000-01-01' ~ '9999-12-31'
  • 용도: 생년월일, 공휴일 등 날짜 정보만 필요할 때
ALTER TABLE Reservation MODIFY COLUMN ReserveDate DATE;
INSERT INTO Reservation (ReserveDate) VALUES ('2025-05-18');

✅ DATETIME: 날짜 + 시간 저장

  • 형식: 'YYYY-MM-DD HH:MM:SS'
  • 범위: '1000-01-01 00:00:00' ~ '9999-12-31 23:59:59'
  • 용도: 예약 시간, 로그인 시각 등 날짜와 시간이 모두 필요한 경우
ALTER TABLE Reservation MODIFY COLUMN ReserveDate DATETIME;
INSERT INTO Reservation (ReserveDate) VALUES ('2025-05-18 13:45:00');

✅ TIMESTAMP: UTC 기반 날짜 + 시간

  • 형식: 'YYYY-MM-DD HH:MM:SS'

  • 범위: '1970-01-01 00:00:01' ~ '2038-01-19 03:14:07' (UTC 기준)

  • 특징:

    • 기본값이나 수정 시각으로 자동 시간 저장 가능
  • 타임존 영향을 받음

예시: 변경 시각 자동 기록

ALTER TABLE Reservation
ADD COLUMN LastUpdated TIMESTAMP DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP;

✅ TIME: 시간만 저장

  • 형식: 'HH:MM:SS', 'HHH:MM:SS'
  • 범위: 838:59:59 ~ 838:59:59
  • 용도: 하루 내 시각 또는 시간 간격 (근무 시간, 이용 시간)
ALTER TABLE Reservation ADD COLUMN CheckIn TIME;
INSERT INTO Reservation (CheckIn) VALUES ('08:30:00');

✅ YEAR: 연도만 저장

  • 형식: YEAR(4)
  • 범위: 1901 ~ 2155
  • 주의: YEAR(2)는 MySQL 5.7.5 이후 지원 종료
  • 용도: 출생 연도, 회계 연도, 제작 연도 등
ALTER TABLE Reservation ADD COLUMN ThisYear YEAR;
INSERT INTO Reservation (ThisYear) VALUES (2025);

2. 날짜/시간 타입 비교표

타입 저장 데이터 형식 범위
DATE 날짜 'YYYY-MM-DD' '1000-01-01' ~ '9999-12-31'
DATETIME 날짜 + 시간 'YYYY-MM-DD HH:MM:SS' '1000-01-01 00:00:00' ~ '9999-12-31 23:59:59'
TIMESTAMP UTC 기반 날짜+시간 'YYYY-MM-DD HH:MM:SS' '1970-01-01' ~ '2038-01-19'
TIME 시간만 'HH:MM:SS' -838:59:59 ~ 838:59:59
YEAR 연도만 YEAR(4) 1901 ~ 2155

3. 날짜/시간 타입 사용 사례 및 선택 가이드

사용 목적 추천 타입 이유
생년월일, 행사일 DATE 시간 정보 불필요
예약 시간, 작업 시간 DATETIME 날짜 + 시간 모두 필요
생성일, 수정일 자동 기록 TIMESTAMP 현재 시간 자동 입력 기능
근무 시간, 수업 시작 시간 TIME 하루 중 시각만 필요
제작 연도, 출생 연도 YEAR 연도만 필요, 공간 절약

4. 실전 예제 모음

-- 날짜 저장
ALTER TABLE Reservation MODIFY COLUMN ReserveDate DATE;
INSERT INTO Reservation (ReserveDate) VALUES ('2025-01-01');

-- 날짜 + 시간 저장
ALTER TABLE Reservation MODIFY COLUMN ReserveDate DATETIME;
INSERT INTO Reservation (ReserveDate) VALUES ('2025-01-01 09:30:00');

-- 시간만 저장
ALTER TABLE Reservation ADD CheckIn TIME;
INSERT INTO Reservation (CheckIn) VALUES ('10:00:00');

-- 연도 저장
ALTER TABLE Reservation ADD ThisYear YEAR;
INSERT INTO Reservation (ThisYear) VALUES (2025);

-- 현재 시각 자동 기록 (TIMESTAMP)
ALTER TABLE Reservation
ADD COLUMN UpdatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP;

질문 정리

  1. DATETIME과 TIMESTAMP의 차이는 무엇인가요?

    • DATETIME: 로컬 시간 기반, 넓은 범위 지원
    • TIMESTAMP: UTC 기준, 현재 시각 자동 저장/업데이트에 최적
  2. TIME 타입에서 24시간 이상도 저장 가능한가요?

    • 네, 838:59:59까지 저장 가능하여 시간 간격 표현에 적합합니다.
  3. YEAR 타입은 문자열로도 저장되나요?

    • 숫자 또는 문자열 입력 모두 가능하지만, YEAR(2)는 더 이상 사용하지 않습니다.
  4. 현재 시간 자동 저장하려면 어떻게 하나요?

    • TIMESTAMP 타입에 DEFAULT CURRENT_TIMESTAMP를 설정하세요.
  5. 날짜 비교는 어떻게 하나요?

    SELECT * FROM Reservation WHERE ReserveDate >= '2025-01-01';
    

카테고리:

업데이트:

댓글남기기