0

这只是在工作中出现,我想知道这个功能背后的基本原理是什么

function        Description
age(timestamp)  Subtract from current_date (at midnight)

有人问为什么这会从午夜减去给定的日期?而不是从 now() 中减去它?有原因吗?或者仅仅是因为?

4

1 回答 1

0

两种形式都age()作为timestamp参数,而不是date. 如果您提供 a ,它会在午夜date转换为相应的。timestamp

单参数形式根据今天午夜计算年龄,这显然是最有用的默认值:

  • 如果你提供 a timestamp,你会得到一个天的间隔,加上到午夜的时差。
  • 如果你提供 a date,你会得到一个天的间隔。

这些是稳定的、易于使用的、易于理解的结果。
如果要根据 来计算年龄now(),则这些都不是。您始终可以使用双参数形式明确地做到这一点。

所以这些表达式产生相同的结果:

SELECT age(now())
     , age(now()::date, now())
     , age(date_trunc('day', now()), now());
于 2012-07-19T01:13:00.167 回答