gpt4 book ai didi

sql - 唯一日期时间范围的 Postgres 约束

转载 作者:行者123 更新时间:2023-11-29 11:23:16 25 4
gpt4 key购买 nike

我的表有两列:

  1. 开始于
  2. endsAt

两者都保存日期和时间。我想做以下约束:

如果两列都不是 NULL,则 startsAt 和 endsAt 之间的范围不得与其他范围(来自其他行)重叠。

最佳答案

您可以保留单独的 timestamp 列并仍然使用 exclusion constraint在表达式上:

CREATE TABLE tbl (
tbl_id serial PRIMARY KEY
, starts_at timestamp
, ends_at timestamp
, EXCLUDE USING gist (tsrange(starts_at, ends_at) WITH &&) -- no overlap
);

Constructing a tsrange value没有显式边界,因为 tsrange(starts_at, ends_at) 假定默认边界:包含下限和独占上限 - '[)',这通常是最好的。

db<> fiddle here
<子>旧sqlfiddle

相关:

向现有表添加约束

ALTER TABLE tbl ADD CONSTRAINT tbl_no_overlapping_time_ranges
EXCLUDE USING gist (tsrange(starts_at, ends_at) WITH &&)

语法细节与 CREATE TABLE 相同.

关于sql - 唯一日期时间范围的 Postgres 约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26735955/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com