SQL 날짜와 시간 타입 DATE, TIME, DATETIME, TIMESTAMP, YEAR
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;
질문 정리
-
DATETIME과 TIMESTAMP의 차이는 무엇인가요?
DATETIME: 로컬 시간 기반, 넓은 범위 지원TIMESTAMP: UTC 기준, 현재 시각 자동 저장/업데이트에 최적
-
TIME 타입에서 24시간 이상도 저장 가능한가요?
- 네,
838:59:59까지 저장 가능하여 시간 간격 표현에 적합합니다.
- 네,
-
YEAR 타입은 문자열로도 저장되나요?
- 숫자 또는 문자열 입력 모두 가능하지만,
YEAR(2)는 더 이상 사용하지 않습니다.
- 숫자 또는 문자열 입력 모두 가능하지만,
-
현재 시간 자동 저장하려면 어떻게 하나요?
TIMESTAMP타입에DEFAULT CURRENT_TIMESTAMP를 설정하세요.
-
날짜 비교는 어떻게 하나요?
SELECT * FROM Reservation WHERE ReserveDate >= '2025-01-01';
댓글남기기