Postgresql 将日期范围的上限更新为无穷大
如何只更新daterange列的上限的语法让我感到困惑 我希望下限保持不变,如果daterange列(例如timespan)包含某个界限(例如2013-12-31),则只将其上限更新为“无穷大” 就我所知:Postgresql 将日期范围的上限更新为无穷大,postgresql,postgresql-9.3,Postgresql,Postgresql 9.3,如何只更新daterange列的上限的语法让我感到困惑 我希望下限保持不变,如果daterange列(例如timespan)包含某个界限(例如2013-12-31),则只将其上限更新为“无穷大” 就我所知: UPDATE table SET timespan = daterange(lower(timespan),upper(infinity)::daterange) WHERE (upper(timespan) = '2013-12-31'::daterange); 您没有告诉我们您遇到了什
UPDATE table
SET timespan = daterange(lower(timespan),upper(infinity)::daterange)
WHERE (upper(timespan) = '2013-12-31'::daterange);
您没有告诉我们您遇到了什么错误,但据我所知,有三个问题: 第一:对
日期范围的两个强制转换是错误的。daterange
的边界是date
值。因此,您需要将它们转换为date
而不是daterange
,例如
where upper(timespan) = '2013-12-31'::date
第二个问题是上限(无穷大)
的使用。同样地,infinity
不是一个范围,只是一个时间点,所以对它使用upper()
是不起作用的
而无穷大
必须用单引号括起来,您可以将其用作关键字
UPDATE the_table
SET timespan = daterange(lower(timespan),'infinity')
WHERE (upper(timespan) = date '2013-12-31');
我认为将上限设置为null
也会有同样的效果。不确定null
和infinity
之间是否有细微的差别作为界限之一。您没有告诉我们您得到了什么错误,但据我所知,有三个问题:
第一:对日期范围的两个强制转换是错误的。daterange
的边界是date
值。因此,您需要将它们转换为date
而不是daterange
,例如
where upper(timespan) = '2013-12-31'::date
第二个问题是上限(无穷大)
的使用。同样地,infinity
不是一个范围,只是一个时间点,所以对它使用upper()
是不起作用的
而无穷大
必须用单引号括起来,您可以将其用作关键字
UPDATE the_table
SET timespan = daterange(lower(timespan),'infinity')
WHERE (upper(timespan) = date '2013-12-31');
我认为将上限设置为null
也会有同样的效果。不确定作为边界之一的null
和infinity
之间是否存在细微差异。作为范围边界,null和infinity之间存在差异。无穷界小于nullinfinity
基本上是最高可能日期值的别名<代码>选择日期“无穷大”
返回292278994-08-17
。作为范围界限,null和无穷大之间存在差异。无穷界小于nullinfinity
基本上是最高可能日期值的别名<代码>选择日期“无限”
返回292278994-08-17
。