我在Postgres 10.6数据库中有一个表,列的类型为tstzrange
。
我需要插入/更新具有定义的下限的行,但是将当前时间的值作为范围的上限,因此将NOW()
作为上限值。
尝试过类似的事情:
UPDATE table_name
SET date_range = ['2018-03-23 00:00:00-05', now())
WHERE id = 3;
是否可以使用内置函数或子查询?
答案 0 :(得分:2)
使用 范围构造器 。 The manual:
每个范围类型都有一个构造函数,其名称与 范围类型。经常使用构造函数 比编写范围文字常量更方便,因为它避免了 需要额外引用绑定值。构造函数 接受两个或三个参数。两参数形式构造一个 标准形式的范围(下限包含,上限排除), 而三参数形式构造了一个范围为 第三个参数指定的形式。第三个参数必须为 字符串“ {
()
”,“(]
”,“[)
”或“[]
”中的一个。
所以:
UPDATE table_name
SET date_range = tstzrange('2018-03-23 00:00:00-05', now())
WHERE id = 3;
我认为您知道now()
可以解决交易的开始时间。