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

时间:2020-02-06 07:29:07

标签: sql postgresql

我发现以下行:

#include <stdio.h>

void f1(int a)   // pass-by-value
  {
     a+=2;
  }

void f2(int* a)  // pass-by-reference (pointer)
  {
     (*a)+=2;
  }

int main(int argc, char argv[])
{
    int a=0;
    f1(a);
    printf("a=%i \n",a);
    a=0;
    f2(&a);
    printf("a=%i \n",a);#
    return 0;
}

返回0。

即使我们走得更远:

select extract(year from '2021-01-01'::timestamp - '2020-01-01');

结果仍然为0。

我了解背后的原因。如果我们运行查询以检查连续两个新年之间的间隔:

select extract(year from '2021-01-01'::timestamp - '2010-01-01');

我们得到以下结果:

0年0星期一366天0小时0分钟0.00秒

select '2021-01-01'::timestamp - '2020-01-01'; 不够精确-可能意味着365天或366天。

问题:是否存在一种优雅的方法来从间隔(即两个时间戳之间的时差)中检索年份计数?类似于第一个查询,我希望结果为1。

1 个答案:

答案 0 :(得分: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

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