首页 > 解决方案 > 如何从postgres的间隔中提取年份

问题描述

我发现以下行:

select extract(year from '2021-01-01'::timestamp - '2020-01-01');

返回 0。

即使我们走得更远一点:

select extract(year from '2021-01-01'::timestamp - '2010-01-01');

结果还是0。

我理解这背后的基本原理。如果我们运行查询来检查连续新年之间的间隔:

select '2021-01-01'::timestamp - '2020-01-01';

我们得到以下结果:

0 年 0 月 366 天 0 小时 0 分钟 0.00 秒

1 year不够精确 - 它可能意味着 365 或 366 天。

问题:是否有一种优雅的方法可以从两个时间戳之间的差异中检索年份计数?类似于第一个查询,我希望结果为 1。

标签: sqlpostgresql

解决方案


您应该使用AGE而不是区别:

SELECT EXTRACT(YEAR FROM AGE('2021-01-01'::TIMESTAMP, '2010-01-01'::TIMESTAMP));
 date_part 
-----------
        11

请参阅:https ://www.postgresql.org/docs/current/functions-datetime.html

减去参数,产生一个“象征性”的结果,使用年和月,而不仅仅是几天


推荐阅读