如何从postgres的间隔中提取年份

Posted

技术标签:

【中文标题】如何从postgres的间隔中提取年份【英文标题】:How to extract year from interval in postgres 【发布时间】:2020-02-06 07:29:07 【问题描述】:

我发现下面一行:

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。

【问题讨论】:

【参考方案1】:

你应该使用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

减去参数,产生一个使用年和月而不是天数的“符号”结果

【讨论】:

以上是关于如何从postgres的间隔中提取年份的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 postgres 将时间间隔转换为小时数?

如何使用 postgres 将时间间隔转换为小时数?

如何在 Postgres 中获取时间间隔的平均值

从 postgres 表中提取 json 数组给出错误:无法从标量中提取元素

如何在postgres中对几个月的日期记录分组后填补时间间隔

试图从 laravel 中的日期获取月份(并且 postgres 提取不起作用)