pau*_*ulf 2 postgresql datediff
我想知道是否有其他人遇到过这种情况或知道有关它的信息。
今天是 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
Run Code Online (Sandbox Code Playgroud)
好像查询到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
Run Code Online (Sandbox Code Playgroud)
有人对此有什么想法吗?或者有什么关于日期算术的有趣之处?
postgres 版本是 9.2.4
或者有什么关于日期算术的有趣之处?
这很有趣,好吧,但不是让你发笑的方式。
十二个月必须等于一年,不是吗?
=> SELECT '12 months'::interval = '1 year'::interval;
?column?
----------
t
Run Code Online (Sandbox Code Playgroud)
好的。说得通。嗯 - 想知道一个月有多长。
=> SELECT '30 days'::interval = '1 month'::interval;
?column?
----------
t
Run Code Online (Sandbox Code Playgroud)
很公平。假设他们必须挑选一些东西。
嗯——但这意味着……
=> SELECT '360 days'::interval = '12 months'::interval;
?column?
----------
t
Run Code Online (Sandbox Code Playgroud)
这似乎意味着……
=> SELECT '360 days'::interval = '1 year'::interval;
?column?
----------
t
Run Code Online (Sandbox Code Playgroud)
那不可能是对的!他们需要做的是一个月等于 30.41666 天。不挂了,闰年呢?嗯 - 这会影响几周吗?啊!
基本上,您无法在时间单位之间进行明智的转换。没有一分钟有 60 秒,没有一天有 24 小时,没有一年有 52 周甚至 365 天。不幸的是,人类(尤其是客户型人类)喜欢在时间单位之间进行转换,所以我们最终会陷入这样的混乱。
PostgreSQL 的系统并不比任何其他系统更疯狂,实际上比大多数系统都要好。
| 归档时间: |
|
| 查看次数: |
1877 次 |
| 最近记录: |