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

vi4fp9gy  于 2023-10-18  发布在  PostgreSQL
关注(0)|答案(3)|浏览(192)

我使用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 day,这似乎是错误的:

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

| ?栏?|
| --|
| 1.0 |
有没有更好的方法来获得可信的解决方案?

7gyucuyw

7gyucuyw1#

如果你想 * 包括 * 两个日期边界,添加+ 1实际上是正确的。根据您自己的定义,“2019-01-01”和“2019-01-01”之间有 * 一 * 天。
既然你说的是日期,而不是时间戳,有一个更简单的方法:

SELECT date '2019-12-31'
     - date '2019-01-01'
     + 1 AS range;

| 范围|
| --|
| 365 |
减去日期返回integer
如果输入是timestamp值,只需转换为date来截断时间分量:

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

l5tcr1uw2#

你大概是想说

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天。

w1jd8yoj

w1jd8yoj3#

迂回的方式:

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

相关问题