펌 - http://ntalbs.github.io/2010/postgresql-date/
간단한 날짜 관련 함수 및 날짜 연산:
select current_date ;
select now ();
select current_timestamp ;
select
current_date - 1 "어제" ,
current_date "오늘" ,
current_date + 1 "내일"
;
select extract (dow from current_date );
select extract (isodow from current_date );
select extract (doy from current_date );
select extract (week from current_date );
select '2010-07-05' ::date - '2010-06-25' ::date ;
한 주의 첫날, 마지막 날 구하기:
select
date_trunc('week' , current_date )::date "이번 주 첫날" ,
date_trunc('week' , current_date )::date +6 "이번 주 마지막 날"
;
select
date_trunc('week' , current_date -7 )::date "전 주 첫날" ,
date_trunc('week' , current_date -7 )::date +6 "전주 마지막 날"
;
select
date_trunc('week' , current_date +7 )::date "다음 주 첫날" ,
date_trunc('week' , current_date +7 )::date +6 "다음주 마지막 날"
;
select
date_trunc('week' , current_date )::date -1 "이번 주 첫날" ,
date_trunc('week' , current_date )::date +6 -1 "이번 주 마지막 날"
;
select
date_trunc('week' , current_date -7 )::date -1 "전 주 첫날" ,
date_trunc('week' , current_date -7 )::date +6 -1 "전주 마지막 날"
;
select
date_trunc('week' , current_date +7 )::date -1 "다음 주 첫날" ,
date_trunc('week' , current_date +7 )::date +6 -1 "다음주 마지막 날"
;
한 달의 첫날, 마지막 날 구하기:
select
current_date - interval '1 months' "전 달" ,
current_date + interval '1 months' "다음 달"
;
select
date_trunc('month' ,
current_date )::date "첫날" ,
date_trunc('month' ,
current_date + interval '1 months' )::date - 1 "마지막 날"
;
select
date_trunc('month' ,
current_date - interval '1 months' )::date "첫 날" ,
date_trunc('month' ,
current_date )::date - 1 "마지막 날"
;
select
date_trunc('month' ,
current_date + interval '1 months' )::date "첫 날" ,
date_trunc('month' ,
current_date + interval '2 months' )::date - 1 "마지막 날"
;
이번 주 첫날부터 마지막 날까지 날짜들:
select
date_trunc('week' , current_date )::date -1 + i "일~토" ,
date_trunc('week' , current_date )::date + i "월~일"
from generate_series(0 ,6 ) as t(i);
이번 달 첫날부터 마지막 날까지 날짜들: generate_series()
함수를 사용한다. 한 달이 28일, 29일, 30일, 31일 중 어떤 것이 될지 알 수 없기 때문에 월의 마지막날을 구해 generate_series()
의 두번째 인수로 넣어준다.
select date_trunc('month' , current_date )::date + (i - 1 )
from
generate_series(
1 ,
extract (day from date_trunc('month' , current_date + interval '1 months' )::date - 1 )::integer
) as t(i);
select date_trunc('month' , current_date )::date + (i - 1 )
from
generate_series(
1 ,
extract (day from date_trunc('month' , current_date ) + interval '1 months' - interval '1 days' )::integer
) as t(i);
week of month: 이번 달의 첫날부터 마지막 날까지의 날짜와 week of month를 구하는 쿼리인데, 1일~7일까지는 첫째 주, 8일~14일까지는 둘째 주와 같은 식으로 된다. 역시 generate_series()
함수를 사용했다. 위와 같이 첫 날과 마지막 날의 차를 구해 수열을 만들지 않고, 0~30까지 만들어 무조건 더하면서 이번 달에 속하는 날짜만 WHERE
조건으로 추려내게 했다.
select dt, to_char(dt, 'W' ) "day of week"
from (
select date_trunc('month' , current_date )::date + i dt
from generate_series(0 , 30 ) as t(i)
) t
where extract (month from dt) = extract (month from current_date )
;
PostgreSQL 매뉴얼 참조 URL: http://www.postgresql.org/docs/8.4/interactive/functions-datetime.html http://www.postgresql.org/docs/8.4/interactive/functions-formatting.html
공유하기
URL 복사 카카오톡 공유 페이스북 공유 엑스 공유