我想知道两者之间是否有区别
all.equal(dplyr_correct_df, zooreg_correct_df)
#> [1] TRUE
与
select '1980-01-01'::date + 2345;
除了第二个版本返回时间戳的事实,显然问题与一般情况有关,而不是此特定示例
答案 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
的错误。