CodeGym /행동 /SQL SELF /날짜와 시간 다루기 위한 데이터 타입: DATE, TIME

날짜와 시간 다루기 위한 데이터 타입: DATE, TIME, TIMESTAMP

SQL SELF
레벨 15, 레슨 4
사용 가능

앱 만들다 보면 날짜랑 시간 다루는 경우 진짜 많지? 온라인 주문, 스케줄, DB 변경 이력 등등 — 이런 것들은 전부 시간 저장을 제대로 해야 돼. PostgreSQL은 이런 데이터 다루는 데 엄청 강력한 기능을 주고, 시간 들어간 테이블이라고 해서 무서운 시계표가 아니라, 이벤트를 분석하고 정리할 수 있게 딱 구조화된 거야.

날짜/시간 타입을 쓰면 이런 게 가능해:

  • 날짜만 저장 DATE, 시간만 저장 TIME, 둘 다 같이 저장 TIMESTAMP.
  • 날짜 더하기, 날짜끼리 차이 구하기, 시간 기준으로 데이터 필터링 같은 연산도 할 수 있어.
  • 타임존도 다룰 수 있는데(이건 나중에 따로 배울 거야).

데이터 타입: DATE, TIME, TIMESTAMP

DATE 데이터 타입

DATE는 시간 없이 날짜만 저장하는 타입이야. 연, 월, 일만 기록하지. 이런 경우에 유용해:

  • 유저 생일 저장할 때.
  • 이벤트 날짜만 중요하고, 시간은 필요 없을 때.

포맷 예시: YYYY-MM-DD (연-월-일).

예시:

id name - VARCHAR(100) event_date - DATE
1 SQL Workshop 2025-06-15
2 Python 2025-06-17
3 Java Courses 2025-06-25

TIME 데이터 타입

TIME은 시간만 저장할 때 써. 이런 상황에서 좋아:

  • 예를 들어, 출근 시간 같은 스케줄 저장할 때.
  • 시간만 중요하고, 날짜는 필요 없을 때.

포맷 예시: HH:MI:SS (시:분:초).

예시:

id task_name - VARCHAR(100) start_time - TIME
1 Team Meeting 09:00:00
2 Code Review 11:30:00
3 Client Call 15:00:00

TIMESTAMP 데이터 타입

TIMESTAMP는 날짜랑 시간이 같이 들어가는 타입이야. 이런 때 쓰면 딱이야:

  • 예를 들어, 유저가 로그인한 순간을 기록할 때.
  • 변경 이력 남길 때(로그 기록).

포맷 예시: YYYY-MM-DD HH:MI:SS (연-월-일 시:분:초).

예시:

id action - VARCHAR(100) login_time - TIMESTAMP
1 User Login 2023-10-15 14:30:00
2 File Uploaded 2023-10-15 15:10:00
3 User Logout 2023-10-15 16:45:00

날짜와 시간 연산

이제 어떤 타입이 있는지 알았으니까, 실제로 어떻게 다루는지 보자. PostgreSQL은 날짜랑 시간 연산할 수 있는 내장 함수가 진짜 많아.

날짜/시간 일부만 뽑아내기

만약에 TIMESTAMP 값에서 연, 월, 일, 시 같은 것만 뽑고 싶으면 EXTRACT 함수 쓰면 돼.

예시:

SELECT EXTRACT(YEAR FROM TIMESTAMP '2025-06-15 14:30:00') AS year;
-- 결과: 2025

SELECT EXTRACT(MONTH FROM TIMESTAMP '2025-06-15 14:30:00') AS month;
-- 결과: 06

SELECT EXTRACT(DAY FROM TIMESTAMP '2025-06-15 14:30:00') AS day;
-- 결과: 15

시간 간격 더하고 빼기

일주일 뒤가 궁금해? 아니면 어제가 언제였는지? interval 연산을 써봐.

예시:

-- 현재 날짜에 7일 더하기
SELECT CURRENT_DATE + INTERVAL '7 days' AS next_week;

-- 1달 빼기
SELECT CURRENT_DATE - INTERVAL '1 month' AS last_month;

날짜 비교하기

이벤트가 이미 지났는지 어떻게 알지? 버그 찾는 것보다 쉬워 — 그냥 값 비교하면 끝.

예시:

SELECT event_date
FROM events
WHERE event_date < CURRENT_DATE;
-- 과거에 있었던 이벤트만 선택

날짜랑 시간 함수에 대해서는 다음 강의에서 더 자세히 배울 거야. 지금은 이런 타입이 있다는 것만 기억하면 충분해.

타임존 문제랑 시간 표준

이번 강의에서는 타임존까지 깊게 들어가진 않지만, PostgreSQL은 TIMESTAMPTZ (타임존 포함된 timestamp) 타입도 지원해. 예를 들어, 2023-10-15 14:30:00+02는 UTC+2 타임존이라는 뜻이야.

이건 나중에 꼭 다룰 거니까 기대해 :P

예제

이제 우리가 배운 걸 실제로 써보자. 학생들 수업 스케줄 저장하는 테이블을 만들어볼게.

id subject_name class_date - DATE start_time - TIME end_time - TIME created_at - TIMESTAMP
1 Mathematics 2023-10-16 09:00:00 10:30:00 2023-10-12 14:00:00
2 Physics 2023-10-16 11:00:00 12:30:00 2023-10-12 14:00:00
3 Chemistry 2023-10-17 09:00:00 10:30:00 2023-10-12 14:01:00
4 Literature 2023-10-17 11:00:00 12:30:00 2023-10-12 14:01:00
5 Computer Science 2023-10-18 10:00:00 11:30:00 2023-10-12 14:02:00

몇 강의만 더 들으면 이런 테이블을 SQL 쿼리로 직접 만들 수 있을 거야. 지금은 그냥 구경만 해도 돼 :)

흔한 실수들

날짜/시간 포맷: 데이터 넣을 때는 YYYY-MM-DD (날짜), HH:MI:SS (시간) 포맷을 꼭 지켜야 해. PostgreSQL은 "15/10/2023" 이런 식으로 넣으면 못 알아들어.

데이터 타입 불일치: DATE 필드에 텍스트 값을 넣으려고 하면 에러 나.

시간 간격 실수: 예를 들어, 2월에 30일 더하면 PostgreSQL이 알아서 처리해주긴 하는데, 날짜가 3월로 넘어갈 수도 있어.

이제 PostgreSQL에서 날짜랑 시간 다루는 데이터 타입은 다 알았지! 실제 프로젝트에서는 스케줄 관리, 이벤트 로그, 중요한 이벤트 추적 등에 엄청 유용하게 써먹을 수 있어!

2
과제
SQL SELF, 레벨 15, 레슨 4
잠금
TIMESTAMP에서 시간 정보 추출하기
TIMESTAMP에서 시간 정보 추출하기
2
과제
SQL SELF, 레벨 15, 레슨 4
잠금
미팅 일정 만들기
미팅 일정 만들기
1
설문조사/퀴즈
숫자형 데이터 타입, 레벨 15, 레슨 4
사용 불가능
숫자형 데이터 타입
숫자형 데이터 타입
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION