1. 개요
실무에서 RDBMS를 다룰 때, 다양한 유형의 시간 관련 데이터 타입을 사용합니다. 시간 관련 데이터 타입은 대표적으로 다음과 같습니다.
- Date: 일자 정보를 가지며, 주로 'YYYY-MM-DD' 형식으로 표현됩니다.
- Timestamp: 일자와 함께 시간 정보를 가지며, 'YYYY-MM-DD HH24:MI:SS' 형식으로 표현됩니다.
- Time: 시간 정보만을 가지며, 'HH24:MI:SS' 형식으로 표현됩니다.
- Interval: 특정 기간을 나타내며, 'N days HH:MI_SS' 형식으로 표현됩니다(timestamp 형식 데이터와 연산할 때 사용합니다.).
문자열을 Date, Timestamp로 변환하는 코드는 간단히 아래와 같습니다:
to_date('2022-01-01', 'yyyy-mm-dd')
to_timestamp('2022-01-01', 'yyyy-mm-dd')
to_timestamp('2022-01-01', 'yyyy-mm-dd hh24:mi:ss')
2. 시간 데이터 연산
Date 타입에 숫자값을 더하거나 빼면 숫자값에 해당하는 일자를 더하거나 빼서 날짜를 계산할 수 있습니다:
SELECT to_date('2022-01-01', 'yyyy-mm-dd') + 2 -- 결과: 2022-01-03
단, Timestamp 타입에는 숫자값을 더하거나 빼려면 interval을 사용해야 합니다:
SELECT to_date('2022-01-01 14:36:52', 'yyyy-mm-dd hh24:mi:ss') + interval '7 hour';
Date 타입에도 interval과 연산이 가능하지만, 결과는 Timestamp 타입으로 전환됩니다:
SELECT to_date('2020-01-01', 'yyyy-mm-dd') + interval '2 days';
3. 시간 관련 주요 함수
시간 데이터 관련해서 사용하는 대표적인 함수는 다음과 같습니다:
- now(): 현재 시간 반환
- current_timestamp: now()와 동일
- current_date: 현재 날짜 반환
- current_time: 현재 시간 반환
- date_trunc: 특정 시간 단위로 데이터를 절삭
시간 데이터를 일, 월, 년 단위로 절삭해주는 date_trunc 함수의 경우 group by 절에도 많이 사용됩니다. 현재 시간을 '초' 단위 아래로 절삭한 코드는 아래와 같습니다.
date_trunc('second', now())
데이터가 속한 'week'의 시작 날짜를 구하는 코드는 다음과 같습니다.
SELECT date_trunc('week', '2023-12-21'::date)::date;
'week'의 마지막 날짜는 간단히 6일을 더해주면 됩니다.
SELECT (date_trunc('week', '2023-12-23'::date) + interval '6 days')::date;
마찬가지로, 'month'의 마지막 날짜를 구하기 위해서는 이번 달의 1일에서, 1달을 더해주고 하루를 빼주면 됩니다.
SELECT (date_trunc('month', '2023-12-23'::date) + interval '1 month' - interval '1 day')::date;
반응형
'SQL' 카테고리의 다른 글
SQL GROUP BY 절 이해하기: 주요 특징 (1) | 2023.12.21 |
---|---|
SQL 데이터 형식 알아보기(숫자형, 문자형, 날짜형) (0) | 2023.12.15 |
SQL 기본 문법 알아보기 (0) | 2023.12.14 |
SQL 기초 알아보기 (0) | 2023.12.14 |