【问题标题】:How to get year interval between two date in postgresql?如何在postgresql中获取两个日期之间的年份间隔?
【发布时间】:2021-09-21 09:10:28
【问题描述】:

我想要这样的年份间隔

从日期 = 15-09-2019,到日期 = 21-09-2021

15-09-2019 - 31-12-2019 //2019 年

01-01-2020 - 31-12-2020 //2020 年

01-01-2021 - 21-12-2021 //2021 年

这样我就可以从这些间隔中获取数据

In this table i have values only for 2021 but not for 2019 and 2020 如果有,2019-2020 年范围内没有数据,Traincount 和tonnage 参数应为0。

【问题讨论】:

  • 这些操作的期望结果是什么?

标签: sql postgresql


【解决方案1】:

简单地减去它们:

SELECT ('2015-01-12'::date - '2015-01-01'::date) AS days;

结果:

 days
------
   11

【讨论】:

    【解决方案2】:

    获取年度总结有一种蛮力方法,即按天分解数据然后汇总:

    select min(dte), max(dte)
    from generate_series('2019-09-15'::date, '2021-09-21'::date, interval '1 day') gs(dte)
    group by date_trunc('year', dte);
    

    但是,更有效的方法会避免聚合:

    select greatest(gs.dte, v.fromdate),
           least(gs.dte + interval '1 year - 1 day', v.todate)
    from (values ('2019-09-15'::date, '2021-09-21'::date)) v(fromdate, todate) cross join lateral
         generate_series(date_trunc('year', v.fromdate), date_trunc('year', v.todate), interval '1 year') gs(dte);
    

    Here 是一个 dbfiddle。

    【讨论】:

    • 谢谢@Gordon Linoff。这个查询真的有效。你能详细解释一下吗?
    【解决方案3】:

    你可以试试

    select extract('year' from now()) - extract('year' from now());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 2013-10-17
      相关资源
      最近更新 更多