我有一个任务在SQL中创建触发器或约束。触发器假设检查一个新事件是否适合日程安排。没有事件可以同时发生。属性是事件的日期,时间和长度。我的想法是用新条目的时间+长度检查事件中时间+长度的间隔值。如果它们重叠,则会引发异常。我真的不知道如何实现它。事件约束的SQL时间戳
0
A
回答
0
在Postgres中,您可以使用exclusion constraint轻松实现,无需触发器。
假设你的表看起来是这样的:
create table event
(
id serial primary key,
event_name varchar(100),
event_start timestamp,
duration interval
);
然后你就可以防止使用以下约束重叠事件:
alter table event
add constraint no_overlapping_events
exclude using gist (tsrange(event_start, event_start + duration) with &&);
在约束定义的tsrange()
创建timestamp range可以被有效比较重叠的行。
以下两个插件会成功:
insert into event (event_name, event_start, duration)
values ('First', timestamp '2017-10-16 10:00:00', interval '2' hour);
insert into event (event_start, duration)
values ('Second', timestamp '2017-10-16 12:00:00', interval '4' hour);
但是下面插入将作为事件失败“三”重叠与事件“二”:
insert into event (event_start, duration)
values ('Third', timestamp '2017-10-16 12:00:00', interval '1' hour);
+0
它是一种包含这个函数并使用触发器的方法吗?并且包括竞技场和地方。 – Lulle
相关问题
- 1. MVC/EF DB First和SQL约束默认时间戳字段
- 2. 时间约束
- 3. SQL - FK之间的约束
- 4. 如何合并时间戳和NOT NULL约束Postgres的
- 5. 带约束的时间表
- 6. 列的SQL约束条件
- 7. SQL,时间在时间戳
- 8. DateTime对象未受其时间戳约束?
- 9. 检查在约束时间戳在甲骨文
- 10. SignalR.EventAggregatorProxy约束事件问题
- 11. 节约时间结束
- 12. Celeryd时间约束错误
- 13. Oracle Sql时间戳
- 14. SQL Server 2012约束条件
- 15. SQL约束电子邮件
- 16. SQL Server - 约束
- 17. SQL,约束CHECK
- 18. SQL Server约束
- 19. ibatis的和SQL时间戳
- 20. SQL中的时间戳记
- 21. mysql schedueld事件'execute_at'时间戳
- 22. 记录Google SketchUp时间戳记事件
- 23. 谷歌地图事件时间戳
- 24. 事件绑定在JavaScript时间戳
- 25. SQL:基于时间戳加入连续事件
- 26. Fullcalendar显示事件的结束时间
- 27. 当没有约束时,sql无法删除约束
- 28. MySQL的基于时间的约束
- 29. SQL选择时间戳列在两个时间戳之间
- 30. 如何在SQL Server时间戳和时间戳之间
我们正在使用的Postgres。 – Lulle