Kampfgummibaerlie
Datenbank-Guru
- Beiträge
- 743
Also, ich wende das zwar ein wenig anders an, aber ich denke, es könnte auch noch andere interessieren.
Ist einfach aus der Doku ein wenig abgewandelt, damit es als boolean zurückgibt, ob ich zurzeit Arbeit habe, oder nicht.
Ich wende es, um ehrlich zu sein an, um auf der Homepage reinschreiben zu können, ob wir gerade offen haben, oder nicht.
Ich schreibe hier alle Codes, die nötig sind, wenn man von 0 anfängt:
1.: Datenbank erstellen:
2.: Unterfunktion des Typs Timerange erstellen, welchen wir brauchen, um die wöchentlichen Arbeitszeiten einzutragen.
3.: Den Typ Timerange erstellen, welcher unsere Arbeitszeiten im Sinne von "Startzeitpunkt" und "Endzeitpunkt" hat, wie zB: Schule fängt um 08:00 an, und dauert am Dienstag (Wochentag_ID gleich 2) bis 14:00:
Ich wende in meiner Datenbank, oder Beschreibung andere Werte, als hier im Beispiel erwähnt, aber ich versuche, einen naturgetreuen, kindersicheren Vergleich darzustellen:
4.: Eine Tabelle der entsprechenden Arbeitszeiten erstellen:
5.: Ein paar Werte in die Tabelle einfügen:
6.: Die gewollte Funktion erstellen, welche ja oder nein ausgibt, je nachdem, ob zurzeit eine Arbeitszeit ist:
ANHANG:
Falls mir bei den Codes ein Fehler unterlaufen ist, bitte darauf hinweisen *Kein Selbstvertrauen habe*, aber ja, das baue ich mir wohl auf, wenn ich ein paar positive Rückmeldungen bekomme.
Ist einfach aus der Doku ein wenig abgewandelt, damit es als boolean zurückgibt, ob ich zurzeit Arbeit habe, oder nicht.
Ich wende es, um ehrlich zu sein an, um auf der Homepage reinschreiben zu können, ob wir gerade offen haben, oder nicht.
Ich schreibe hier alle Codes, die nötig sind, wenn man von 0 anfängt:
1.: Datenbank erstellen:
Code:
create database arbeitszeiten;
2.: Unterfunktion des Typs Timerange erstellen, welchen wir brauchen, um die wöchentlichen Arbeitszeiten einzutragen.
Code:
CREATE FUNCTION time_subtype_diff(x time, y time) RETURNS float8
AS 'SELECT EXTRACT(EPOCH FROM (x - y))' LANGUAGE sql STRICT IMMUTABLE;
3.: Den Typ Timerange erstellen, welcher unsere Arbeitszeiten im Sinne von "Startzeitpunkt" und "Endzeitpunkt" hat, wie zB: Schule fängt um 08:00 an, und dauert am Dienstag (Wochentag_ID gleich 2) bis 14:00:
Ich wende in meiner Datenbank, oder Beschreibung andere Werte, als hier im Beispiel erwähnt, aber ich versuche, einen naturgetreuen, kindersicheren Vergleich darzustellen:
Code:
CREATE TYPE timerange AS RANGE (subtype = time, subtype_diff = time_subtype_diff);
4.: Eine Tabelle der entsprechenden Arbeitszeiten erstellen:
Code:
create table oeffnungszeiten (wochentag_id integer, oeffnungszeit timerange);
5.: Ein paar Werte in die Tabelle einfügen:
Code:
INSERT INTO public.oeffnungszeiten(wochentag_id, oeffnungszeit) VALUES ('1', '(13:00, 18:00)');
INSERT INTO public.oeffnungszeiten(wochentag_id, oeffnungszeit) VALUES ('2', '(08:00, 14:00)');
INSERT INTO public.oeffnungszeiten(wochentag_id, oeffnungszeit) VALUES ('3', '(13:00, 18:00)');
INSERT INTO public.oeffnungszeiten(wochentag_id, oeffnungszeit) VALUES ('4', '(08:00, 14:00)');
INSERT INTO public.oeffnungszeiten(wochentag_id, oeffnungszeit) VALUES ('5', '(08:00, 12:00)');
INSERT INTO public.oeffnungszeiten(wochentag_id, oeffnungszeit) VALUES ('5', '(14:00, 20:00)');
INSERT INTO public.oeffnungszeiten(wochentag_id, oeffnungszeit) VALUES ('6', '(09:00, 12:00)');
6.: Die gewollte Funktion erstellen, welche ja oder nein ausgibt, je nachdem, ob zurzeit eine Arbeitszeit ist:
Code:
create or replace function oeffnung_auth() returns boolean as
$$ declare passed boolean; begin SELECT oeffnungszeit @> now()::time
into passed FROM oeffnungszeiten where wochentag_id = wochentag_datum(now()::date);
return passed; end; $$ language plpgsql;
ANHANG:
Falls mir bei den Codes ein Fehler unterlaufen ist, bitte darauf hinweisen *Kein Selbstvertrauen habe*, aber ja, das baue ich mir wohl auf, wenn ich ein paar positive Rückmeldungen bekomme.