我有一個任務在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