如何只更新日期范围列的上限的语法让我感到难过。
我希望下限保持不变,如果它包含某个范围(例如2013-12-31),则只将日期范围列的上限(例如,时间跨度)更新为“无穷大”。
这是我得到的:
UPDATE table
SET timespan = daterange(lower(timespan),upper(infinity)::daterange)
WHERE (upper(timespan) = '2013-12-31'::daterange);
答案 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
会产生相同的效果。不确定null
和infinity
之间是否存在细微差别作为其中一个界限。