프로그래밍/MSSQL

[MSSQL] 날짜와 시간

KRLAND 2025. 3. 26. 16:07

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 기준 현재 시간