【PostgreSQL】月末日を取得する(LAST_DAY)

PostgreSQL自作関数

月末日を取得する(LAST_DAY)

対象の日付から、月末の日を取得します。

例:2020/01/01を指定すると、2020/01/31が返ります。

 

使っている構文

月末を求めるためには、

例えば2月の月末日を求めたいなら、3月1日から1日引けば2月の月末日になるということです。

つまり引数の月の最初の日(○月1日)を取得し、+1月して、-1日すれば求めることができます。

 

そのためにこの関数では主に次の2つの構文を使っています。

① 月の最初の日を取得する

date_trunc('month',日付・タイムスタンプ)  -- 日付に対し、月の最初の日を取得する

② 月、日付を加算する

select current_date + cast('5 months' as INTERVAL);  --"2020-11-12 00:00:00"
select current_date + cast('5 days' as INTERVAL);    --"2020-06-17 00:00:00"

 

 

引数

引数1(timestamp with time zone):月末を取得するタイムスタンプ

 

返り値

月末の日付(Date型)

 

コード

CREATE OR REPLACE FUNCTION last_day(timestamp with time zone)
  RETURNS date AS
$BODY$
declare
begin
    --引数の月の最初の日を取得、+1月して、-1日することにより月末を取得する
	return date(DATE_TRUNC('month', $1) + '1 month' +'-1 Day');
end;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;

※ PostgreSQL9.5 , 9.6 , 10 , 11 , 12で動作確認済み 自作関数の実行方法はこちら

 

実行例

select * from last_day(now());  --2019-09-30
select * from last_day(cast('2020/01/01' as date)); --2020-01-31