我正在运行 PostgreSQL 9.4.5,我刚刚从这个查询中得到了一个意外的结果:
select upper(('[2005-12-01,2005-12-04]')::daterange)
它返回2005-12-05
而不是2005-12-04
.
)
以下查询通过指定而不是来排除上限]
:
select upper(('[2005-12-01,2005-12-04)')::daterange)
它返回2005-12-04
。
该upper()
函数不应该返回给定范围的上限吗?如果是这样,通过指定[2005-12-01,2005-12-04]
为范围,它应该返回上限,即2005-12-04
. 它2005-12-05
反而返回,这对我来说很奇怪。
关于为什么会发生这种情况的任何解释?我只知道它'[2005-12-01,2005-12-04]'::daterange
被 PostgreSQL 翻译成'[2005-12-01,2005-12-05)'::daterange
,但这并不能解释为什么2005-12-05
当我明确指定2005-12-04
为上限时应该是上限。
'[2005-11-01,2005-12-04]'
只是表示规范形式的日期范围的另一个字符串文字'[2005-11-01,2005-12-05)'
。文档:大胆强调我的。
否则,您将有两个相等的值,
upper()
但仍会返回不同的结果,这是不可接受的。