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

前端之家收集整理的这篇文章主要介绍了sql – 唯一日期时间范围的Postgres约束前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的表有两列:

> startsAt
>结束

两者都保持日期和时间.
我想制定以下约束:

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

解决方法

您可以保留单独的时间戳列,并在表达式上仍然使用 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 overlapping
);

Constructing a tsrange value没有显式边界,因为tsrange(starts_at,ends_at)自动采用默认边界:包括下限和排除上限 – ‘[)’,这通常是最好的.

SQL Fiddle.

有关:

> Preventing adjacent/overlapping entries with EXCLUDE in PostgreSQL

向现有表添加约束

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

语法详细信息与CREATE TABLE相同.

猜你在找的MsSQL相关文章