MSSQL (Microsoft SQL Server)에서 날짜와 시간을 다루는 데 사용하는 DATETIME 관련 데이터 타입들에 대해 각각 어떤 상황에 쓰는지, 어떤 형식으로 값을 리턴하는지까지 알아봅시다.
MSSQL에서 날짜/시간 관련 데이터 타입 종류
데이터 타입설명지원 범위정밀도 (초 단위)저장 공간
DATETIME | 날짜와 시간을 저장. 자주 사용됨 | 1753-01-01 ~ 9999-12-31 | 1/300초 (약 3.33ms) | 8바이트 |
SMALLDATETIME | 간단한 날짜/시간용, 시간 정밀도가 낮음 | 1900-01-01 ~ 2079-06-06 | 1분 | 4바이트 |
DATE | 날짜만 저장 (시간 없음) | 0001-01-01 ~ 9999-12-31 | 없음 | 3바이트 |
TIME | 시간만 저장 (날짜 없음) | 00:00:00 ~ 23:59:59.9999999 | 최대 100ns | 3~5바이트 |
DATETIME2 | DATETIME의 확장형. 더 넓은 범위와 더 높은 정밀도 지원 | 0001-01-01 ~ 9999-12-31 | 최대 100ns | 6~8바이트 |
DATETIMEOFFSET | DATETIME2 + 타임존 오프셋까지 포함 | 0001-01-01 ~ 9999-12-31 | 최대 100ns | 8~10바이트 |
사용 방법 예시 및 반환값
1. DATETIME
DECLARE @dt DATETIME = GETDATE();
SELECT @dt;
-- 결과: 2025-03-26 14:33:12.437
- 날짜 + 시간 (초 단위까지, 밀리초는 3.33ms 단위라 약간 뭉툭함)
- 1753년부터 사용 가능 (이전은 저장 불가)
2. SMALLDATETIME
DECLARE @sdt SMALLDATETIME = GETDATE();
SELECT @sdt;
-- 결과: 2025-03-26 14:33
- 초 정보가 없고 분까지만 저장
- 데이터 양이 적을 때 유리 (4바이트)
3. DATE
DECLARE @d DATE = GETDATE();
SELECT @d;
-- 결과: 2025-03-26
- 시간 정보 없음
4. TIME
DECLARE @t TIME = GETDATE();
SELECT @t;
-- 결과: 14:33:12.4370000
- 날짜 정보 없이 순수 시간만 저장
- TIME(3) 이런 식으로 정밀도 설정 가능
5. DATETIME2
DECLARE @dt2 DATETIME2(7) = SYSDATETIME();
SELECT @dt2;
-- 결과: 2025-03-26 14:33:12.4371234
- DATETIME보다 정밀도 높음 (최대 7자리까지 초 뒤에 소수점 가능)
- SYSDATETIME()과 함께 사용하면 정확한 시스템 시간 저장 가능
6. DATETIMEOFFSET
DECLARE @dto DATETIMEOFFSET = SYSDATETIMEOFFSET();
SELECT @dto;
-- 결과: 2025-03-26 14:33:12.4371234 +09:00
- DATETIME2에 시간대 정보까지 추가됨
- 전 세계 사용자 시간 저장할 때 유리 (예: 글로벌 앱)
언제 어떤 걸 써야 할까?
상황추천 타입이유
일반적인 날짜/시간 저장 | DATETIME2 | 정밀도 높고 범위 넓음 |
과거 DB와의 호환이 중요할 때 | DATETIME | 레거시 지원 |
단순 날짜만 필요할 때 | DATE | 용량 효율적 |
단순 시간만 필요할 때 | TIME | 예: 출근 시간, 알람 등 |
데이터 용량 줄이려면 | SMALLDATETIME | 공간 절약 |
시간대 정보까지 필요할 때 | DATETIMEOFFSET | 글로벌 서비스용 |
참고 함수들
함수설명
GETDATE() | 현재 날짜와 시간 (DATETIME) |
SYSDATETIME() | 더 정확한 시간 (DATETIME2) |
SYSDATETIMEOFFSET() | 시간대 포함된 현재 시간 |
GETUTCDATE() | UTC 기준 현재 시간 |
'프로그래밍 > MSSQL' 카테고리의 다른 글
[MSSQL] 트랜잭션 락 (Transaction Locking) 이슈 완벽 정리 (0) | 2025.03.26 |
---|---|
[MSSQL] Stored Procedure 실무 고급 활용 정리 (0) | 2025.03.26 |
[MSSQL] Stored Procedure 실무 완전정복 (0) | 2025.03.26 |
[MSSQL] 데이터 타입 (Data Type) 완전 정복 (0) | 2025.03.26 |
[MSSQL] DATETIME 포맷 방법 (0) | 2025.03.26 |