このエントリーをはてなブックマークに追加


PostgreSQLで月末を求める方法

SQLを使って指定した年月の月末日(28日or29日or30日or31日)を取得する例を以下に記します。

関連サイト

使用したPostgreSQLバージョンなど

PostgreSQL 11.5

sakuradb=# select version();
                                                             version
---------------------------------------------------------------------------------------------------------------------------------
 PostgreSQL 11.5 (Raspbian 11.5-1+deb10u1) on arm-unknown-linux-gnueabihf, compiled by gcc (Raspbian 8.3.0-6+rpi1) 8.3.0, 32-bit
(1 行)

date_truncを使って月末日の取得

本日(本月)の月末日、1月から12月までの月末日とうるう年の2月月末日を
取得するSQLおよび実行結果を以下に記します。

本月の月末日を取得する

本月の月末を取得する場合のSQL構文は以下のようになります。

select date_trunc('month',now()) + '1 month' + '-1 days';

now()で本日を取得し、'month'を指定し月精度で切り捨てたあと、
一か月を加算し一日減算することにより月末日を算出しています。

sakuradb=# select date_trunc('month',now()) + '1 month' + '-1 days';
        ?column?
------------------------
 2019-11-30 00:00:00+09
(1 行)

1月から12月の月末日を取得する

以下、2019年1月から12月までの月末をdate_trunc関数を使って取得するSQLになります。

  • SQL
    select date_trunc('month',to_date('2019/01/01','YYYY/MM/DD')) + '1 month' + '-1 days' as end_of_month;
    select date_trunc('month',to_date('2019/02/01','YYYY/MM/DD')) + '1 month' + '-1 days' as end_of_month;
    select date_trunc('month',to_date('2019/03/01','YYYY/MM/DD')) + '1 month' + '-1 days' as end_of_month;
    select date_trunc('month',to_date('2019/04/01','YYYY/MM/DD')) + '1 month' + '-1 days' as end_of_month;
    select date_trunc('month',to_date('2019/05/01','YYYY/MM/DD')) + '1 month' + '-1 days' as end_of_month;
    select date_trunc('month',to_date('2019/06/01','YYYY/MM/DD')) + '1 month' + '-1 days' as end_of_month;
    select date_trunc('month',to_date('2019/07/01','YYYY/MM/DD')) + '1 month' + '-1 days' as end_of_month;
    select date_trunc('month',to_date('2019/08/01','YYYY/MM/DD')) + '1 month' + '-1 days' as end_of_month;
    select date_trunc('month',to_date('2019/09/01','YYYY/MM/DD')) + '1 month' + '-1 days' as end_of_month;
    select date_trunc('month',to_date('2019/10/01','YYYY/MM/DD')) + '1 month' + '-1 days' as end_of_month;
    select date_trunc('month',to_date('2019/11/01','YYYY/MM/DD')) + '1 month' + '-1 days' as end_of_month;
    select date_trunc('month',to_date('2019/12/01','YYYY/MM/DD')) + '1 month' + '-1 days' as end_of_month;
  • 実行結果
    sakuradb=# select date_trunc('month',to_date('2019/01/01','YYYY/MM/DD')) + '1 month' + '-1 days' as end_of_month;
          end_of_month
    ------------------------
     2019-01-31 00:00:00+09
    (1 行)
    
    sakuradb=# select date_trunc('month',to_date('2019/02/01','YYYY/MM/DD')) + '1 month' + '-1 days' as end_of_month;
          end_of_month
    ------------------------
     2019-02-28 00:00:00+09
    (1 行)
    
    sakuradb=# select date_trunc('month',to_date('2019/03/01','YYYY/MM/DD')) + '1 month' + '-1 days' as end_of_month;
          end_of_month
    ------------------------
     2019-03-31 00:00:00+09
    (1 行)
    
    sakuradb=# select date_trunc('month',to_date('2019/04/01','YYYY/MM/DD')) + '1 month' + '-1 days' as end_of_month;
          end_of_month
    ------------------------
     2019-04-30 00:00:00+09
    (1 行)
    
    sakuradb=# select date_trunc('month',to_date('2019/05/01','YYYY/MM/DD')) + '1 month' + '-1 days' as end_of_month;
          end_of_month
    ------------------------
     2019-05-31 00:00:00+09
    (1 行)
    
    sakuradb=# select date_trunc('month',to_date('2019/06/01','YYYY/MM/DD')) + '1 month' + '-1 days' as end_of_month;
          end_of_month
    ------------------------
     2019-06-30 00:00:00+09
    (1 行)
    
    sakuradb=# select date_trunc('month',to_date('2019/07/01','YYYY/MM/DD')) + '1 month' + '-1 days' as end_of_month;
          end_of_month
    ------------------------
     2019-07-31 00:00:00+09
    (1 行)
    
    sakuradb=# select date_trunc('month',to_date('2019/08/01','YYYY/MM/DD')) + '1 month' + '-1 days' as end_of_month;
          end_of_month
    ------------------------
     2019-08-31 00:00:00+09
    (1 行)
    
    sakuradb=# select date_trunc('month',to_date('2019/09/01','YYYY/MM/DD')) + '1 month' + '-1 days' as end_of_month;
          end_of_month
    ------------------------
     2019-09-30 00:00:00+09
    (1 行)
    
    sakuradb=# select date_trunc('month',to_date('2019/10/01','YYYY/MM/DD')) + '1 month' + '-1 days' as end_of_month;
          end_of_month
    ------------------------
     2019-10-31 00:00:00+09
    (1 行)
    
    sakuradb=# select date_trunc('month',to_date('2019/11/01','YYYY/MM/DD')) + '1 month' + '-1 days' as end_of_month;
    select date_trunc('month',to_date('2019/12/01','YYYY/MM/DD')) + '1 month' + '-1 days' as end_of_month;
          end_of_month
    ------------------------
     2019-11-30 00:00:00+09
    (1 行)
    
    sakuradb=# select date_trunc('month',to_date('2019/12/01','YYYY/MM/DD')) + '1 month' + '-1 days' as end_of_month;
          end_of_month
    ------------------------
     2019-12-31 00:00:00+09
    (1 行)

うるう年の2月月末日を取得する

2020年2月の月末日を取得します。

sakuradb=# select date_trunc('month',to_date('2020/02/01','YYYY/MM/DD')) + '1 month' + '-1 days' as end_of_month;
      end_of_month
------------------------
 2020-02-29 00:00:00+09
(1 行)

以上、PostgreSQLのdate_trunc関数を使って指定した月の月末日を取得する方法でした。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-11-03 (日) 15:41:08