我想知道是否有其他人遇到过或知道这方面的信息。
今天是2014年11月3日,如果我检查2013年11月5日是否在去年内,我会根据检查方式得到不同的答案:1年与365天

select now() - '20131105' as diff,
case when now() - '20131105' <= '1 year' then 'within year' else 'not within year' end as yr_check,
case when now() - '20131105' <= '365 days' then 'within 365 days' else 'not within 365 days' end as day_check

2014-11-03 16:27:38.39669-06;  363 days 16:27:38.39669;  not within year;  within 365 days

看来在11月9日的时候,没关系
select now() as right_now, now() - '20131109' as diff,
case when now() - '20131109' <= '1 year' then 'within year' else 'not within year' end as yr_check,
case when now() - '20131109' <= '365 days' then 'within 365 days' else 'not within 365 days' end as day_check

2014-11-03 16:31:12.464469-06;  359 days 16:31:12.464469;  within year;  within 365 days

有人知道吗?或者有什么关于日期计算的有趣的东西吗?
postgres版本是9.2.4

最佳答案

或者有什么关于日期计算的有趣的东西吗?
很好笑,但不会让你笑。
十二个月等于一年,不是吗?

=> SELECT '12 months'::interval = '1 year'::interval;
 ?column?
----------
 t

很好。有道理。嗯-不知道一个月有多长。
=> SELECT '30 days'::interval = '1 month'::interval;
 ?column?
----------
 t

很公平。假设他们得选点东西。
嗯-但那意味着。。。
=> SELECT '360 days'::interval = '12 months'::interval;
 ?column?
----------
 t

这似乎意味着。。。
=> SELECT '360 days'::interval = '1 year'::interval;
 ?column?
----------
 t

那不可能是对的!他们需要做的是有一个月等于30.41666天。不,等等,闰年呢?嗯-这会影响几周吗?啊!
基本上,你不能在时间单位之间进行合理的转换。一分钟不到60秒,一天不到24小时,一年不到52周,甚至365天。不幸的是,人类(特别是顾客塑造的人类)喜欢在时间单位之间转换,所以我们最终会陷入这样的混乱。
PostgreSQL的系统并不比其他任何系统更疯狂,事实上比大多数系统都好。

关于postgresql - postgres“1年”等于“360天”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26724547/

10-13 05:10