[英]How to get the last day of month in postgres?
如何在postgres中找到本月的最后一天? 我有一個日期列以格式(YYYYMMDD)存儲為數字(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
對於任何人來到這個問題尋找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;
如果您使用的是 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
。
例如:
SELECT LAST_DAY( TO_DATE( act_date, 'YYYYMMDD' ) )
好的,所以您有一個numeric(18)
列,其中包含諸如20150118
數字。 您可以將其轉換為日期,例如:
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'
。 而是使用dateadd(month, 1, date)
作為記錄在這里。
要獲得月底,請使用: DATEADD(DAY, -1, (DATE_TRUNC('month', DATEADD(MONTH, 1, date))))
date_trunc('month',current_date) + interval '1 month' - interval '1 day'
將任何日期或時間戳截斷到月份級別將為您提供包含該日期的月份的第一天。 添加一個月會給你下個月的第一個月。 然后,刪除一天將為您提供所提供日期的月份的最后一天的日期。
選擇 to_char(date_trunc('month', now() + '01 Months'::interval) - '01 Days'::interval, 'YYYYmmDD'::text)::numeric as end_period_n
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.