sql - 如何使用 NOW() 函数作为范围的上限?
问题描述
tstzrange
我在 Postgres 10.6 数据库中有一个类型为列的表。我需要插入/更新具有已定义下限的行,但当前时间的值是范围的上限,因此NOW()
是上限值。
尝试过类似的事情:
UPDATE table_name
SET date_range = ['2018-03-23 00:00:00-05', now())
WHERE id = 3;
有没有办法使用内置函数或子查询?
解决方案
使用范围构造函数。手册:
每个范围类型都有一个与范围类型同名的构造函数。使用构造函数通常比编写范围文字常量更方便,因为它避免了对绑定值的额外引用。构造函数接受两个或三个参数。双参数形式构造标准形式的范围(包括下限,不包括上限),而三参数形式构造具有由第三个参数指定的形式的范围的范围。第三个参数必须是字符串“<code>()”、“<code>(]”、“<code>[)”或“<code>[]”之一。
所以:
UPDATE table_name
SET date_range = tstzrange('2018-03-23 00:00:00-05', now())
WHERE id = 3;
我假设您知道这now()
可以解决事务的开始时间。
推荐阅读
- javascript - 使用值和所有内容保存整个 HTML 结构
- java - Java泛型中的独立类型参数
- c# - System.Threading.Timer 在 25-30 次后停止
- excel - 如何清理包含特殊字符的字符串数据行,例如“thereΓÇÖs not”
- github - 将新文件夹从本地机器推送到 Github
- arrays - 在数组中实例化下一个和上一个预制件的问题(Unity 3D)
- python - ModuleNotFoundError:ubuntu 上没有名为“包”的模块
- snowflake-cloud-data-platform - Snowflake 中的异步游标执行
- typescript - 类属性未扩展到继承类型
- c# - 如何在有或没有用户输入参数的情况下有效地从 Linq 获取结果