【PostgreSQL】月末日を取得する(LAST_DAY)
月末日を取得する(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