Hallo,
ich schreibe gerade eine DB, in der Arzt-Praxen erfasst werden soll. Adresse und Name usw. ist ja kein Problem, aber irgendwie komme ich bei den Öffnungszeiten auf keine vernünftige Lösung, die man auch einfach abfragen kann.
Zur Klärung ein Beispiel:
Praxis 1: Öffnungszeiten Mo, Di, Do, Fr 8.00-12.00 u. 15.00-17.00
Praxis 2: Öffnungszeiten Mo 10.00-18.00; Di, Do, Fr 09.00-12.30
(an nicht aufgeführten Tagen ist geschlossen)
…
Mit einer Abfrage soll man jetzt z.B. herausbekommen, welchen Praxen Di um 08.30 geöffnet haben.
Bevor ich aber ein SELECT dazu zusammenbasteln kann, muss ich eine vernünftige Tabelle Öffnungszeiten erstellen, habe aber totale Ladehemmung. Euch Experten fällt aber bestimmt was dazu ein.
Praxis 1: Öffnungszeiten Mo, Di, Do, Fr 8.00-12.00 u.
15.00-17.00
Praxis 2: Öffnungszeiten Mo 10.00-18.00; Di, Do, Fr
09.00-12.30
(an nicht aufgeführten Tagen ist geschlossen)
Hallo Marvin,
die Tabelle sollte neben einer Praxis_id, die 7 Wochentage (okay ggf. 5 oder auch 6 Arbeitstage)(mit Booleanwert für geöffnet am Wochentag) und eine Start- und Endezeitpunkt haben.
Praxis 1 und 2 erhält jeweils zwei Einträge
ID Mo Di Mi Do Fr Sa So vonUhr bisUhr
1 Y Y N Y Y N N 08:00 12:00
1 Y Y N Y Y N N 15:00 17:00
2 Y N N N N N N 10:00 18:00
2 N Y N Y Y N N 09:00 12:30
Wenn man Mittagspause und alle Wochentage einbezieht kann eine Praxis bis zu 14 Einträge erhalten.
Das kann man forcieren, wenn man den 7 Tagen nur ein Feld Wochentag einrichtet. Dann hätte Praxis 1 8 Einträge und Praxis 2 4 Einträge.
MfG Georg V.
P.S.: Ich würde noch ein Gültigkeitzeitraum eintragen. Es könnte ja sein, dass eine Praxis im Sommer andere Öffnungszeiten hat als im Winter.
ID TAG VON BIS GUELTIG\_VON GUELTIG\_BIS
1 MO 08:00 12:00 01.01.2008
1 DI 08:00 12:00 01.01.2008
1 DO 08:00 12:00 01.01.2008
1 FR 08:00 12:00 01.01.2008
2 MO 10:00 17:00 01.01.2008 30.06.2008
2 MO 10:00 18:00 01.07.2008
usw
P.S.: Ich würde noch ein Gültigkeitzeitraum eintragen. Es
könnte ja sein, dass eine Praxis im Sommer andere
Öffnungszeiten hat als im Winter.
Hab ich gemacht:wink:
Du willst jetzt gerade (wir nehmen an, es sei Montag, 18.8.2008, 11Uhr) wissen, wer offen hat? Unter Oracle:
select praxis.name,zeit.von,zeit.bis
from praxis,zeit
where praxis.id = zeit.id
and to\_char(sysdate,'DY') = zeit.tag
and sysdate between trunc(sysdate)+zeit.von
and trunc(sysdate)+zeit.bis
and trunc(sysdate) between trunc(gueltig\_von)
and nvl(gueltig\_bis,sysdate)
praxis.name zeit.von zeit.bis
----------- -------- --------
ARZT1 08:00 12:00
ARZT2 10:00 18:00
Hallo Georgh und Tomh,
vielen Dank für eure Lösungsansätze, ihr habt mich unheimlich vorangebracht. Muss jetzt erstmal testen, welcher Ansatz effektiver ist.