SQL Fundamental4 (Timestamp, Date, Interval)

한지훈·2023년 7월 1일
0

SQL

목록 보기
5/9
post-thumbnail

시간에 대한 타입

  • Date: 일자로서 년, 월, 일의 정보를 가짐. YYYY-MM-DD
  • Timestamp: 일자를 시간 정보까지 같이 가짐. YYYY-MM-DD HH24:MI:SS
  • Time: 오직 시간 정보만 가짐. HH24:MI:SS
  • Interval: N days HH24:MI_SS => 시작부터 종료까지 며칠동안 혹은 몇달동안 걸렸느냐 표현하는 타입

문자열을 Date, Timestamp로 변환

  • to_date('2022-01-01', 'yyyy-mm-dd') => 2022-01-01
  • to_timestamp('2022-01=01 14:36:52', 'yyyy-mm-dd hh24:mi:ss') => 2022-01-01 14:36:52.000 +0900

Date, Timestamp를 문자열로 변환

  • to_char(date_column, 'yyyy-mm-dd') => 1980-12-17 (문자열)

시간에 대한 Formatting

::date, ::timestamp, ::text를 사용한 형 변환(PostgreSQL 문법)

  • Date를 Timestamp로 변환: select to_date('2022-01-01', 'yyyy-mm-dd')::timestamp;
  • Timestamp를 Text 변환: select to_date('2022-01-01', 'yyyy-mm-dd')::text;
  • Timestamp를 Date로 변환: select to_date('2022-01-01', 'yyyy-mm-dd')::date;

extract를 이용하여 년, 월, 일 추출

  • extract(year from hiredate) as year
  • extract(month from hiredate) as month
  • extract(day from hiredate) as day

날짜와 시간의 연산

Date 타입에 숫자 연산을 하면 해당하는 일자에 대한 연산이 됨.
Timestamp 타입에 숫자에 대한 연산을 하면 오류!!
Timestamp는 interval 타입에 대한 연산을 수행해야 한다.

Date 타입 + 숫자

select to_date('2022-01-01', 'yyyy-mm-dd') +  2 
--출력값: => 	2022-01-03

Timestamp 타입 + Interval 타입

 select to_timestamp('2022-01-01 14:36:52', 'yyyy-mm-dd hh24:mi:ss') + interval '7 hour' 
 --출력값: => 2022-01-01 21:36:52.000

Date 타입 + Interval 타입 => 결과는 Timestamp 타입으로 변환됨.

select to_date('2022-01-01', 'yyyy-mm-dd') + interval '2 days' as date_01;
--결과: 2022-01-03 00:00:00.000

Date 타입간의 연산 => 결과는 정수형으로 나온다. (Date간의 연산에서 뺄셈만 가능하며, 덧셈은 불가능함.)

select to_date('2022-01-03', 'yyyy-mm-dd') - to_date('2022-01-01', 'yyyy-mm-dd')
--결과: 2(정수형)

Timestamp 타입 간의 연산 => 결과는 interval로 나온다.

select to_timestamp('2022-01-01 14:36:52', 'yyyy-mm-dd hh24:mi:ss') 
     - to_timestamp('2022-01-01 12:36:52', 'yyyy-mm-dd hh24:mi:ss')
-- 결과: 02:00:00 

현재 시간 구하기.

  • now() => timestamp 타입
  • current_timestamp => timestamp 타입
  • current_date => date 타입
  • current_time => time 타입

trunc

trunc(a, b)

python의 round 함수와 상이하다. 첫 번째 파라미터인 a 대하여 두 번째 파라미터 b자리 이후로부터는 자르겠다라는 함수이다.

ex)

select trunc(99.9999, 2);
--결과: 99.99

date_trunc

date_trunc는 trunc와는 다르게 첫 번째 인자로 들어온 기준으로 두 번째 인자(Date)를 자르는 함수이다. 입력에 Date 타입이든 Timestamp 타입이든 반환 타입은 Timestamp이다.

ex)

select date_trunc('day', '2022-03-03 14:05:32'::timestamp)
--결과: 2022-03-03 00:00:00.000

--Month 기준으로 자르면, day는 해당 month의 1일으로 지정된다.

select date_trunc('month', '2022-03-03'::date)::date as date_01;
--결과 => 2022-03-01

--Year 기준으로 자르면, month와 day는 해당 year의 1월 1일으로 지정된다.

select date_trunc('year', '2022-03-03'::date)::date as date_01;
--결과 => 2022-01-01

주(Week) 기준으로 할 수 있다. 해당 주의 월요일 기준으로 지정한다.

-- week의 시작 날짜 구하기. 월요일 기준.
select date_trunc('week', '2022-03-03'::date)::date as date_01;
-- 결과: 2022-02-28

Month의 마지막 날자를 구하는 코드

-- month의 마지막 날짜 
select (date_trunc('month', '2022-03-03'::date) + interval '1 month' - interval '1 day')::date;

인프런 강의

profile
노력하는 개발자

0개의 댓글