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 по дате отправления: