将整数与日期间隔比较是否有区别?

时间:2018-06-27 15:54:45

标签: postgresql date

我想知道两者之间是否有区别

all.equal(dplyr_correct_df, zooreg_correct_df)
#> [1] TRUE

select  '1980-01-01'::date + 2345;

除了第二个版本返回时间戳的事实,显然问题与一般情况有关,而不是此特定示例

1 个答案:

答案 0 :(得分:1)

除了您提到的返回类型外没有其他区别。当您将integer添加到date时,Postgres会像对待带间隔的天数一样对待它。实际上,在列出date + integer操作的文档中明确提到了此操作。虽然,它并不能解释底层发生了什么,但是可以清楚地假设它正在添加最低的粒度(日期中的天数)。

另外,请注意,在夏令时更改期间可以观察到24小时不等于1天。

Documentation mentions this operation:

Operator    Example                                  Result
+           date '2001-09-28' + integer '7'          date '2001-10-05'

在返回数据类型的情况下,相同的操作相反:date - date返回int

db=# select pg_typeof('1980-05-01'::DATE - '1980-02-03'::DATE);
 pg_typeof
-----------
 integer

首次尝试将数字添加到日期的限制是,您不能成功地将日期的一部分(例如12.5 days)添加到日期,这很明显(因为它不再是整数),因为它无法将输出转换为最新的。这意味着'1980-01-01' + 12.5返回不存在的运算符date + numeric的错误。