check for overlapping time intervals
| От | Wolfgang Meiners |
|---|---|
| Тема | check for overlapping time intervals |
| Дата | |
| Msg-id | kl32r0$850$1@ger.gmane.org обсуждение исходный текст |
| Ответы |
Re: check for overlapping time intervals
|
| Список | pgsql-sql |
Hi, I am on postgresql 9.1 and use at table like CREATE TABLE timetable(tid INTEGER PRIMARY KEY,gid INTEGER REFERENCES groups(gid),day DATE,s TIME NOT NULL, ---starte TIME NOT NULL, --- endCHECK (e > s)); Now, i need a constraint to prevent overlapping timeintervals in this table. For this, i use a trigger: CREATE OR REPLACE FUNCTION validate_timetable() RETURNS trigger AS $$ BEGINIF TG_OP = 'INSERT' THEN IF EXISTS( SELECT * FROM timetable WHERE gid = NEW.gid AND day = NEW.day AND s < NEW.e ANDe > NEW.s) THEN RAISE EXCEPTION 'overlapping intervals'; END IF;ELSIF TG_OP = 'UPDATE' THEN IF EXISTS( SELECT * FROMtimetable WHERE gid = NEW.gid AND day = NEW.day AND tid <> OLD. tid AND s < NEW.e AND e > NEW.s) THEN RAISE EXCEPTION'overlapping intervals'; END IF;END IF;RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE TRIGGER validate_timetable BEFORE INSERT OR UPDATE ON timetable FOR EACH ROW EXECUTE PROCEDURE validate_timetable(); Is there a simpler way to check for overlapping timeintervals? I ask this question, because i have more similar tables with similar layout and would have to write similar functions again and again. Thank you for any hints Wolfgang
В списке pgsql-sql по дате отправления: