在PostgreSQL中计算AGE时的行为不一致?

时间:2015-03-18 12:44:24

标签: postgresql

在postgresql 9.1中使用AGE函数时遇到不同的结果。

  1. 不正确的。当天从2月28日更改为3月1日,将添加两天。
  2. 查询:选择年龄('2015-02-28','2012-06-24');
    结果: 2年8个月4天

    查询:选择年龄('2015-03-01','2012-06-24');
    结果: 2年8个月7天

    1. 似乎正确,年龄从2014-02-27计算。这里不会添加额外的天数。
    2. 查询:选择年龄('2015-02-28','2014-02-27');
      结果: 1年1天

      查询:选择年龄('2015-03-01','2014-02-27');
      结果: 1年2天

      运行查询时必须发生什么?

1 个答案:

答案 0 :(得分:2)

文档说:

  

PostgreSQL的方法在计算部分月份时使用两个日期中较早的月份。例如,age('2004-06-01', '2004-04-30')使用4月产生1个1天,而使用5月会产生1个2天,因为5月有31天,而4月只有30个。

因此,对于您的示例,2012-06-24是您的早期日期"而六月有30天。所以你的差异计算为24到30是6而1是7。

这不是理智的imho,但age()函数的行为完全符合文档。

修改

更确切地说:age()函数计算日期之间的差异。不要用它来做到这一点。