【发布时间】:2015-03-26 23:37:59
【问题描述】:
如何在 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
【问题讨论】:
-
to_date仅将字符串转换为日期。如果您的列包含 Unix 纪元值,则需要使用to_timestamp:to_timestamp(act_dt)::date。 -
@AudriusKažukauskas:错误:函数 to_timestamp(numeric) 不存在提示:没有函数与给定名称和参数类型匹配。您可能需要添加显式类型转换。 ?
-
to_timestamp需要双精度类型,尝试将您的列转换为它:to_timestamp(act_dt::float8)::date。顺便说一句,您能否确认此列存储 Unix 纪元时间值?如果不是这种情况,您应该在您的问题中解释它到底存储了什么。 -
您可以通过将
INTERVAL '1 MONTH - 1 day'替换为INTERVAL '1 MONTH' - interval '1 day'来进行计算 -
@AudriusKažukauskas :该列的值类似于 act_dt
20131014 20130614 20150124 20110128 20120825
标签: sql amazon-redshift