首页 > 解决方案 > 如何使用 NOW() 函数作为范围的上限?

问题描述

tstzrange我在 Postgres 10.6 数据库中有一个类型为列的表。我需要插入/更新具有已定义下限的行,但当前时间的值是范围的上限,因此NOW()是上限值。

尝试过类似的事情:

UPDATE table_name
SET date_range = ['2018-03-23 00:00:00-05', now())
WHERE id = 3;

有没有办法使用内置函数或子查询?

标签: sqlpostgresqlinsertrangerange-types

解决方案


使用范围构造函数手册:

每个范围类型都有一个与范围类型同名的构造函数。使用构造函数通常比编写范围文字常量更方便,因为它避免了对绑定值的额外引用。构造函数接受两个或三个参数。双参数形式构造标准形式的范围(包括下限,不包括上限),而三参数形式构造具有由第三个参数指定的形式的范围的范围。第三个参数必须是字符串“<code>()”、“<code>(]”、“<code>[)”或“<code>[]”之一。

所以:

UPDATE table_name
SET    date_range = tstzrange('2018-03-23 00:00:00-05', now())
WHERE  id = 3;

我假设您知道这now()可以解决事务的开始时间。


推荐阅读