PostgreSQLで月末を取得する方法

こんにちは、さるまりんです。

プログラムを作っていると月末を求める必要が出てくることがあります。

今回はそれをPostgreSQLでやってみます。

実行時点の月末を取得するのはこんな感じでできます。

select date_trunc('month', current_timestamp) + '1 month' + '-1 days' as eom;

実行時の日時(current_timestamp)にdate_trunc'month'を指定し月初を取得、
それに1月を足し(次月の月初)、
さらに1日を引いて当月の月末を取得しています。

salu=> select date_trunc('month', current_timestamp) + '1 month' + '-1 days' as eom;
eom
------------------------
2022-10-31 00:00:00+09
(1 row)

今度は文字列でやってみます。

今年の2月14日を指定してみました。

salu=> select date_trunc('month', to_date('2022/02/14', 'YYYY/MM/DD')) + '1 month' + '-1 days' as eom;
eom
------------------------
2022-02-28 00:00:00+09
(1 row)

閏年の2月でやってみます。
次の閏年は2024年なので2024年2月14日を指定してみました。

salu=> select date_trunc('month', to_date('2024/02/14', 'YYYY/MM/DD')) + '1 month' + '-1 days' as eom;
eom
------------------------
2024-02-29 00:00:00+09
(1 row)

ちゃんと2月29日でとれていますね。

以前、JavaPHPでもやっていますが、PostgreSQLでもこんな風にできるんですね。

データベースに任せてしまった方が処理がわかりやすくなる時はこちらを使おうと思います。

読んでくださってありがとうござます。

それではまた!