Postgresで月の最後の日を見つける方法は? format(YYYYMMDD)のnumeric(18)として保存された日付列があります。
_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
last_day 関数を使用するだけで:
select last_day(to_date(act_date,'YYYYMMDD'))
PS:今、私はあなたがあなた自身の質問に適切なタグを選ぶことが非常に重要であることを知っていると信じています!
Postgresこれを行う方法(Redshiftを使用しない)を探しているこの質問に答える人は、次のようにします。
SELECT (date_trunc('month', '2017-01-05'::date) + interval '1 month' - interval '1 day')::date
AS end_of_month;
'2017-01-05'
を使用したい日付に置き換えます。これを次のような関数にすることができます。
create function end_of_month(date)
returns date as
$$
select (date_trunc('month', $1) + interval '1 month' - interval '1 day')::date;
$$ language 'sql'
immutable strict;
さて、20150118
のような数字を含むnumeric(18)
列ができました。次のような日付に変換できます。
to_date(your_date_column::text, 'YYYYMMDD')
日付から、 月の最終日 のように取得できます:
(date_trunc('month', your_date_column) +
interval '1 month' - interval '1 day')::date;
組み合わせて、あなたは得るでしょう:
select (date_trunc('month', to_date(act_dt::text, 'YYYYMMDD')) +
interval '1 month' - interval '1 day')::date
from YourTable;
今後の検索では、Redshiftは_INTERVAL '1 month'
_を受け入れません。代わりに、文書化された here としてdateadd(month, 1, date)
を使用してください。
月末を取得するには、DATEADD(DAY, -1, (DATE_TRUNC('month', DATEADD(MONTH, 1, date))))
を使用します。
select to_char(date_trunc( 'month'、now()+ '01 Months ':: interval)-'01 Days' :: interval、 'YYYYmmDD' :: text):: numeric as end_period_n