PostgreSQL 中的最后一天
Posted
技术标签:
【中文标题】PostgreSQL 中的最后一天【英文标题】:last_day in PostgreSQL 【发布时间】:2014-06-19 12:50:29 【问题描述】:oracle last_day
函数返回该月的最后一天。
示例:
nls_date_format='YYYY-MM-DD H24:MI:SS'
select last_day(sysdate) from dual;
LAST_DAY(SYSDATE)
-------------------
2014-06-30 15:45:43
oracle 也返回时间值。
我在 PostgreSQL 中尝试了下面的 sql,它返回一个月的最后一天,但时间值为“00:00:00”。
select (date_trunc('month', now()) + interval '1 month -1 day')::timestamp(0);
?column?
---------------------------
2014-06-30 00:00:00
(1 row)
sql 正确返回日期,但我想要像 oracle 一样的日期和时间。
【问题讨论】:
其实我认为Oracle的last_day
保留时间部分应该被认为是一个错误。它只是不适合这种功能的领域。我什至不知道它,可能任何使用它的人都应该返回并将结果包含在 trunc
中以获得“干净”的值。
【参考方案1】:
select (
date_trunc('month', now())
+ interval '1 month -1 day'
+ now()::time
)::timestamp(0);
【讨论】:
【参考方案2】:函数 last_day() 应该可以解决问题。这个函数应该在一个名为“orafce”的扩展包中找到。包含在 Oracle 中使用的其他函数。
安装正确版本的 orafce 包(如果需要):
apt-get install postgresql-9.1-orafce
SQL:
Create Extension orafce
如果出错将 orafce--3.0.sql 重命名为 orafce--3.03.sql 或用户更高版本的 orafce。
使用函数:
SELECT last_day('2015-01-01')
按预期工作,结果是 '2015-01-31'
【讨论】:
以上是关于PostgreSQL 中的最后一天的主要内容,如果未能解决你的问题,请参考以下文章
PostgreSQL:如何在给定日期范围内的每一天为每个帐户选择最后余额? [复制]