我使用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 |
有没有更好的方法来获得可信的解决方案?
3条答案
按热度按时间7gyucuyw1#
如果你想 * 包括 * 两个日期边界,添加
+ 1
实际上是正确的。根据您自己的定义,“2019-01-01”和“2019-01-01”之间有 * 一 * 天。既然你说的是日期,而不是时间戳,有一个更简单的方法:
| 范围|
| --|
| 365 |
减去日期返回
integer
。如果输入是
timestamp
值,只需转换为date
来截断时间分量:l5tcr1uw2#
你大概是想说
因为它是绝对正确的,在12月31日00:00:00-正好在12月30日23:59:59之后-它只过去了364天。
w1jd8yoj3#
迂回的方式: