PostgreSQL从2个日期列更新daterange列

时间:2018-11-06 23:47:57

标签: postgresql

假设我有一个名为baking_events的表,它有一个start_dateend_date字段。现在,我决定要利用所有不错的范围运算符,因此我在名为daterange的表中添加了一个新的duration列。

我想运行一个查询来更新我的duration表上的baking_events,以便在删除[start_date, end_date]和{之前,它等于每个记录的start_date。 {1}}列。

有没有一种方法可以在postgres中执行而不必遍历每个单独的记录?之类的东西:end_date(此查询显然不起作用,但是应该让您了解我想做什么)。

1 个答案:

答案 0 :(得分:1)

使用daterange constructor:

select daterange('2018-01-01', '2018-12-31', '[]');

        daterange        
-------------------------
 [2018-01-01,2019-01-01)
(1 row) 

尽管此处指定了[[]“,但由于daterangediscrete range type.

,因此在显示时该值将转换为规范形式。

更新命令可能如下所示:

UPDATE baking_events 
SET duration = daterange(start_date, end_date, '[]');

请注意,在添加和更新新列之后,表为not normalized,您应该考虑删除start_dateend_date列。