代码之家  ›  专栏  ›  技术社区  ›  nanounanue

日期范围内的天数

  •  1
  • nanounanue  · 技术社区  · 6 年前

    daterange ? 有可能吗?

    我试过了

    select age(daterange('2018-01-01', '2018-02-01'));
    

    但失败了,我也试着 int 运气不好。我查看了文档,但在范围类型中找不到任何可以完成此操作的函数。

    2 回复  |  直到 6 年前
        1
  •  3
  •   Tim Biegeleisen    6 年前

    我们可以试着用 upper() lower()

    SELECT
        UPPER(daterange('2018-01-01', '2018-02-01')) -
            LOWER(daterange('2018-01-01', '2018-02-01')) AS diff;
    
    31
    

    请注意,构建范围的方式实际上与此相同:

    daterange('2018-01-01', '2018-02-01', '[)')
    

    也就是说,范围是上限独占的。因此,只有2018年1月31日包括在统计中,但不包括2月1日。如果您也希望包含该日期点,则可以使用以下范围:

    daterange('2018-01-01', '2018-02-01', '[]')
    

        2
  •  0
  •   wookiekim    6 年前

    我认为这应该奏效:

    SELECT DATE_PART('day', '2018-01-01'::timestamp - '2018-02-01'::timestamp);
    

    [编辑]

    使用 daterange

    SELECT upper(daterange('2018-01-01', '2018-02-01')) - lower(daterange('2018-01-01', '2018-02-01'))