计算 PostgreSQL 中两个日期之间的天数

问题描述 投票:0回答:3

我正在使用 PostgreSQL 函数

date_part()
来计算两个日期之间经过的(含)天数。

select date_part('day', '2019-12-31 00:00:00'::timestamp
                      - '2019-01-01 00:00:00'::timestamp);

在 DBeaver 中运行此查询返回的结果比预期少 1 天:

日期_部分
364.0

这就像在结果中添加

+1
一样简单,但是下面的句子将返回
1
天,这似乎是错误的:

select 1 + date_part('day', '2019-01-01 00:00:00'::timestamp
                          - '2019-01-01 00:00:00'::timestamp);
?栏?
1.0

有没有更好的方法来获得值得信赖的解决方案?

postgresql date-arithmetic sql-date-functions
3个回答
1
投票

如果您想包括两个日期边界,添加

+ 1
实际上是正确的做法。根据您自己的定义,“2019-1-1”和“2019-1-1”之间有一天

既然你说的是日期,而不是时间戳,那么有一个更简单的方法:

SELECT date '2019-12-31' - date '2019-1-1' + 1;

 ?column? 
----------
      365

减去日期 返回

integer

如果输入是
timestamp
值,只需转换为
date
即可截断时间分量:

SELECT ts1::date - ts2::date + 1;

1
投票

你可能是说

select date_part('day', '2020-01-01 00:00:00'::timestamp - '2019-1-1 00:00:00'::timestamp);

因为它绝对正确,在 12 月 31 日 00:00:00 - 12 月 30 日 23:59:59 之后 - 只过去了 364 天。


1
投票

迂回方式:

select 
   count(*) AS days 
from 
   generate_series('2019-1-1 00:00:00'::timestamp, 
                   '2019-12-31 00:00:00'::timestamp, '1 day');
 days 
------
  365

© www.soinside.com 2019 - 2024. All rights reserved.