Postgres日期相减计算包含首尾日期的实现方案咨询
Postgres 计算包含首尾日期的日期间差解决方案
原因说明
Postgres 中两个date类型直接相减采用的是左闭右开的计算逻辑,也就是只统计两个日期之间的完整间隔天数,不会计入结束日期本身,所以你给出的示例返回364属于符合预期的标准行为。
可选实现方案
直接加1(最常用,性能最优)
这个方案逻辑简单易懂,生产环境中大部分开发者都会选择这种写法,不属于“不优雅”的实现:SELECT ('2021-07-02'::date - '2020-07-03'::date) + 1;显式调整结束日期(可读性更高)
如果担心后续维护的同事看不懂加1的逻辑,可以显式给结束日期加1天再计算差值,逻辑更直白:SELECT ('2021-07-02'::date + INTERVAL '1 day')::date - '2020-07-03'::date; -- 或者用age函数配合date_part实现 SELECT date_part('day', age('2021-07-02'::date + INTERVAL '1 day', '2020-07-03'::date))::int;枚举日期计数(适合小范围日期统计)
如果需要完全显式的逻辑,可以生成两个日期之间的所有日期再统计数量,可读性最高,但性能相对较差,不适合大数据量或高频查询场景:SELECT count(*) FROM generate_series('2020-07-03'::date, '2021-07-02'::date, '1 day'::interval);
内容的提问来源于stack exchange,提问作者aKummari
相关产品推荐
相关产品推荐

