1. ホーム
  2. sql

[解決済み] postgresで月の最終日を取得する方法は?

2022-02-19 12:02:11

質問

Postgresで月の最終日を見つけるにはどうしたらいいですか? 私は日付カラムを数値(18)でフォーマット(YYYYMMDD)として保存しています。 を使用して日付にしようとしています。

to_date("act_dt",'YYYYMMDD') AS "act date"

で、この日付の最終日を求めます。 このように

(select (date_trunc('MONTH',to_date("act_dt",'YYYYMMDD')) + INTERVAL '1 MONTH - 1 day')::date)

が、このようなエラーになります。

ERROR: Interval values with month or year parts are not supported
  Detail: 
  -----------------------------------------------
  error:  Interval values with month or year parts are not supported
  code:      8001
  context:   interval months: "1"
  query:     673376
  location:  cg_constmanager.cpp:145
  process:   padbmaster [pid=20937]
  -----------------------------------------------

何かお手伝いできることはありますか?

Postgresのバージョンです。

PostgreSQL 8.0.2 on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 3.4.2 20041017 (Red Hat 3.4.2-6.fc3), Redshift 1.0.874

解決方法は?

Amazon AWS Redshiftを使用している場合は、Redshiftの LAST_DAY 関数を使用します。RedshiftはPostgreSQLをベースにしていますが。 LAST_DAY 関数は、PostgreSQLでは使用できません PostgreSQLの解決策としては wspurgin の回答を参照してください。 .

https://docs.aws.amazon.com/redshift/latest/dg/r_LAST_DAY.html

LAST_DAY( { date | timestamp } )

LAST_DAY は、date を含む月の最終日の日付を返します。戻り値の型は常に DATE 引数 date のデータ型に関係なく。

例えば

SELECT LAST_DAY( TO_DATE( act_date, 'YYYYMMDD' ) )