IT 일기장

[DB] 날짜 DB 컬럼 타입 분석 본문

프로그래밍 언어/SQL(DB)

[DB] 날짜 DB 컬럼 타입 분석

뽕슈 2025. 1. 9. 13:27
반응형

날짜 데이터 저장 방식은 회사의 사용 목적과 시스템의 요구 사항에 따라 다르다.

날짜를 저장하는 내가 아는 방법은 2가지가 있었는데

 

 

1. DATETIME 타입으로 사용 (년/월/일 시:분:초 통째로 저장)
2. CHAR 또는 INT 타입으로 사용 (년,월,일 시,분,초 각각 따로 저장)

 

 

어떤 방법이 개발에 유리할까?
일반적으로는 DATETIME 타입으로 사용하는 것이 더 유리하다. 그 이유는 아래에서 두 가지 방식의 장단점을 비교해본다.

 

 

 


 

DATETIME의 장점

 

  • 하나의 필드로 날짜와 시간을 모두 저장하기 때문에 구조가 간단하고 관리가 편리
  • 날짜와 시간의 형식이 DB에서 자동으로 관리되므로 입력 및 처리에서 실수 방지
  • 날짜와 시간을 기준으로 쉽게 정렬하거나 비교할 수 있음
-- 날짜와 시간을 기준으로 비교
SELECT * FROM table WHERE start_datetime >= '2024-01-01 00:00:00';

-- 날짜와 시간을 기준으로 정렬
SELECT * FROM table ORDER BY start_datetime DESC;
  • DB의 날짜 함수 (DATEDIFF, TIMESTAMPDIFF, DATE_ADD 등) 를 활용하여 쉽게 연산이 가능
-- TIMESTAMP 함수를 활용한 종료일과 시작일의 차이를 "일"로 표현
SELECT TIMESTAMPDIFF(DAY, start_datetime, end_datetime) AS duration_in_days FROM table;
  • DATETIME은 8바이트로 날짜와 시간을 모두 저장. 저장 공간 절약

 

DATETIME의 단점

 

  • 특수한 분리 조건에서는 추가 작업 필요. 예를 들어 통계에서 많이 사용하는 년,월,일이나 시,분,초별로 각각 날짜나 시간을 분리해서 사용해야 하는 경우, DB 함수를 활용해야 함
-- DATETIME 타입의 날짜와 시간을 분리하기 위해 DATE, TIME 함수를 사용
SELECT DATE(start_datetime) AS start_date, TIME(start_datetime) AS start_time FROM table;

 

 

 

 


 

CHAR, INT의 장점

 

  • 개별 사용이 많을 경우 편리. 날짜와 시간을 개별적으로 저장해야 하거나, 두 필드를  완전히 독립적으로 사용하는 경우 유리.
  • 날짜 또는 시간 필드만 필요할 때, 특정 필드만 저장하거나 선택해서 쓸 수 있음.
  • 시간이나 년/월/일만 관리하는 데이터가 많을 경우 공간 낭비를 줄일 수 있음.

 

CHAR, INT의 단점

 

  • 비교 및 정렬 복잡성 증가
-- 날짜와 시간을 기준으로 정렬할 때 두 필드를 조합해야함
SELECT * FROM table 
ORDER BY CONCAT(start_date, ' ', start_time);
  • 데이터 무결성 관리 필요. 날짜와 시간 형식이 올바르지 않은 데이터가 들어올 수 있음. ex) 2024-23-01 또는 28:71:00
  • 공간 낭비. 년(char(4))/월(char(2))/일(char(2))시(char(2))/분(char(2))/초(char(2))을 개별적으로 저장하면 총 14바이트가 필요함.
  • 날짜 및 시간 연산의 어려움
-- 두 필드를 조합하지 않고는 날짜와 시간 연산이 불가능
SELECT TIMESTAMPDIFF(SECOND, CONCAT(start_date, ' ', start_time), CONCAT(end_date, ' ', end_time)) AS duration_in_seconds FROM table;

 

 

정리하면 다음과 같다.

 

일반적인 경우 : DATETIME 사용. 일관성, 공간 효율성, 연산 효율성에서 모두 좋음

특수한 경우 : CHAR, INT 사용. 통계와 같은 날짜와 시간을 독립적으로 관리해야 하거나 특정 데이터를 더 많이 사용하는 경우 유리.

반응형
Comments