본문 바로가기
Tech/Database

PostgreSQL - 날짜계산

by Augustine™ 2018. 7. 6.
반응형

프로그래밍을 하다가 제일 귀찮은 것 중의 하나가 날짜 데이터 연산이다. 데이터베이스에 저장된 날짜 데이터의 데이터형식이 일률적이면, Application  Layer, 또는 DB Layer에서 표준 계산법을 정하면 되지만.. 실상은 그렇지 않다. 이래서 표준 도메인을 강조하는가 보다.

PostgreSQL에서 날자 계산하는 방법은 아래와 같다. 이 예제는 문자 데이터값 기준이다. 날짜 컬럼의 데이터라면 또 다를 수 있다. 사용법이 다른 dbms보다는 조금 특이한듯 하다.


CREATE TABLE members (
    user_id        varchar(255)
  , regdate varchar(255)
  , birthday     varchar(255)
);

INSERT INTO members
VALUES
    ('USER01', '2016-02-28 10:00:00', '1992-02-28')
  , ('USER02', '2016-02-29 10:00:00', '1993-02-28')
  , ('USER03', '2016-03-01 10:00:00', '1994-02-28')
;

select 
	user_id
	, regdate::timestamp as reg_timestamp
	, regdate::timestamp + '1 hour'::interval as after_1hour
	, regdate::timestamp - '30 minutes'::interval as before_30min
	, regdate::timestamp - '1 day'::interval as before_1day
	, regdate::timestamp - '1 month'::interval as before_1month
from members;	


결과는 아래와 같다.


두 날짜 데이터의 차이를 계산하는 방식은 아래와 같다.


select
	user_id
	, current_date as today
	, regdate::date 
	, current_date - regdate::date as diff_days
from members;	


결과는 아래와 같다.


생년 월일로 사용자의 나이와 같은 추출속성을 도출해야해야 할 때가 있다. 나이를 계산하기 위해서 postgreSQL의 age 함수를 사용한다. 다른  dbms에는 없었던 것 같은데.. 확인해봐야 겠다. age 함수를 쓰면, xx years x month x days 와 같은 형식으로 데이터를 반환한다. 여기에서 EXTRACT 함수를 써서 연도만 추출해서 나이를 구할 수 있다. 


select
	user_id
	, current_date as today
	, regdate::date 
	, birthday::date 
	,extract(YEAR FROM age(birthday::date)) as 현재나이
	
from members;	


결과는 아래와 같다.


반응형

'Tech > Database' 카테고리의 다른 글

PostgreSQL - Record to column  (0) 2018.07.08
PostgreSQL - Window function  (0) 2018.07.06
PostgreSQL - ABS, POWER, SQRT, POINT 함수  (2) 2018.07.06
Transaction의 이해 - PostgreSQL  (0) 2018.07.04
PostgreSQL - greatest, least, SIGN함수  (0) 2018.07.03

댓글