将日期范围的上限更新为无穷大

时间:2014-07-17 10:12:51

标签: postgresql postgresql-9.3

如何只更新日期范围列的上限的语法让我感到难过。

我希望下限保持不变,如果它包含某个范围(例如2013-12-31),则只将日期范围列的上限(例如,时间跨度)更新为“无穷大”。

这是我得到的:

UPDATE table
SET timespan = daterange(lower(timespan),upper(infinity)::daterange)
WHERE (upper(timespan) = '2013-12-31'::daterange);

1 个答案:

答案 0 :(得分:2)

你没有告诉我们你得到了什么错误,但据我所知,有三个问题:

首先:两个强制转换为daterange是错误的。 daterange的范围是date值。因此,您需要将它们转换为date而不是daterange,例如

where upper(timespan) = '2013-12-31'::date

第二个问题是使用upper(infinity)。同样infinity不是一个范围,只是一个时间点,因此使用upper()并不起作用。

并且infinity必须用单引号括起来,您可以将其用作关键字

UPDATE the_table
   SET timespan = daterange(lower(timespan),'infinity')
WHERE (upper(timespan) = date '2013-12-31');

认为将上限设置为null会产生相同的效果。不确定nullinfinity之间是否存在细微差别作为其中一个界限。