【问题标题】:How to include end date while calculating time difference in years?(Postgresql)如何在计算年份时差时包含结束日期?(Postgresql)
【发布时间】:2021-12-28 02:40:01
【问题描述】:

请分享您对此问题的反馈。我需要计算“年”的差异并将其存储在新的“年龄”列下。

虽然公式工作正常,但当我考虑从任何一年的 1 月 1 日开始的日期时,它给出的输出不正确

例如:2019 年 1 月 1 日和 2021 年 12 月 31 日之间的年差为 3 年 - 这包括计算中的结束日期。我的结果显示 2 年。

这是我从中得出差异的 2 个日期列:

但是,当我考虑从 1 月 1 日开始的日期时 - 结果显示我少了一年:

这是我用来计算差异的代码:

UPDATE animals
SET age = abs(benchmarkdate :: date - birthdate :: date)/ 365;

任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 我猜你的要求有点不同,因为当生日在 1 月 1 日时,你想要差异 + 1,否则只是差异。在这种情况下,您可以使用 where 条件并实现此目的。

标签: sql postgresql date


【解决方案1】:

我会在这里使用EXTRACT,然后只对两个日期的年份部分进行差分:

UPDATE animals
SET age = EXTRACT(year FROM benchmarkdate) - EXTRACT(year FROM birthdate);

请注意,您甚至可能希望避免执行此更新,而只是在您选择时计算年龄。如果您预见到需要经常进行此类更新,那将是一个很好的指标,表明您可能应该改变您的方法。

【讨论】:

  • 您好,感谢您的回复。上面的命令不适用于 1 月 1 日的情况,我仍然少了一年。例如:2019 年 1 月 1 日 - 2021 年 12 月 31 日(包括结束日期)使用上述代码变为 2 年,输出应改为 3 年。
  • 我认为这种差异不会是 3 年。
  • 那么从 2019 年 1 月 2 日到 2021 年 12 月 31 日,或从 2019 年 1 月 3 日到 2021 年 12 月 31 日,您的预期结果是什么,......在什么时候改变到 (year-year)+1 到 just (year-year)。顺便说一句,您可能想签出 age 函数。
猜你喜欢
  • 2011-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-17
相关资源
最近更新 更多