我发现以下行:
#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。
答案 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
减去参数,产生使用数年和数月而不是仅仅数天的“符号”结果