sql - 如何从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。
解决方案
您应该使用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
减去参数,产生一个“象征性”的结果,使用年和月,而不仅仅是几天
推荐阅读
- python - 如何使用自定义 tf.Estimator 在张量板事件文件中仅创建一份图形副本?
- python-3.x - 为什么变量 line1 和 line2 不写入文件 'USERDATA.py'?
- c# - 如何在列C#中仅添加数字
- solidity - solidity abi.encodeWithSignature 不适用于 diffienet 参数
- oracle - 以矢量化方式更新 oracle 中的列
- google-cloud-platform - 我们可以更改 GCP Cloud VPN 默认参数吗?
- angular - 用于 GraphQL 的 Angular ngrx 存储和 AWS Amplify API (Appsync)
- android - 如何在 Firebase 顶部安排最新帖子?
- javascript - Vue-router scrollBehavior:为什么 savedPosition 总是等于 { x: 0, y: 0 }?
- c# - 在 Xamarin 中将颜色转换为较深的阴影