AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Überschneidung von Datumsbereichen finden?
Thema durchsuchen
Ansicht
Themen-Optionen

Überschneidung von Datumsbereichen finden?

Ein Thema von Sharky · begonnen am 6. Mai 2004 · letzter Beitrag vom 7. Mai 2004
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#11

Re: Überschneidung von Datumsbereichen finden?

  Alt 6. Mai 2004, 20:31
Zitat von MarkusB:
SQL-Code:
where (
        (BuchungStart between NeueBuchungStart and NeueBuchungEnd)
        or
        (BuchungEnd between NeueBuchungStart and NeueBuchungEnd)
        or
        (BuchungStart <= NeueBuchungStart and BuchungEnd >= NeueBuchungEnd)
      )
Du kannst dir aber auch eine Abfrage sparen:

SQL-Code:
where (
       (BuchungStart between NeueBuchungStart and NeueBuchungEnd)
       or
       (NeueBuchungStart between BuchungStart and BuchungEnd)
     )
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
MarkusB

Registriert seit: 3. Apr 2004
Ort: Hamburg
105 Beiträge
 
#12

Re: Überschneidung von Datumsbereichen finden?

  Alt 6. Mai 2004, 20:41
Hallo alcaeus!

Leider nicht.

Überleg mal:
Wie willst Du ein Zimmer von Mittwoch bis Donnerstag buchen, das aber von Dienstag bis Freitag schon gebucht ist?

Viele Grüße
Markus
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#13

Re: Überschneidung von Datumsbereichen finden?

  Alt 6. Mai 2004, 20:46
Na dann ist ja NeueBuchungStart zwischen BuchungStart und BuchungEnd,oder?

Hier ne Skizze:

Code:
---------------
| NeueBuchung |
---------------
     -------------
     |  Buchung |
     -------------
Hier ist BuchungStart zwischen NeueBuchungStart und NeueBuchungEnd => erkannt

---------------
|   Buchung  |
---------------
     ---------------
     | NeueBuchung |
     ---------------
Hier ist NeueBuchungStart zwischen BuchungStart und BuchungEnd => erkannt

  ---------------
  |   Buchung  |
  ---------------
-------------------
|   NeueBuchung  |
-------------------
Hier ist BuchungStart zwischen NeueBuchungStart und NeueBuchungEnd => erkannt

  ---------------
  | NeueBuchung |
  ---------------
-------------------
|     Buchung    |
-------------------
Hier ist NeueBuchungStart zwischen BuchungStart und BuchungEnd => erkannt
Ich hoffe das hilft, das Schema zu erklären...
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#14

Re: Überschneidung von Datumsbereichen finden?

  Alt 6. Mai 2004, 21:15
Wir hatten hier schon einmal fast die gleiche Diskussion. Ich vertrat erst Marskus' Meinnug, musste aber doch einsehen, dass TreffNix Recht hatte.
Seine Lösung sah IMHO so aus (auf jeden Fall wird das Statement funktionieren ):
SQL-Code:
SELECT *
FROM DeineTabelle t
WHERE t.StartDTM <= :i_EndDTM And t.EndDTM >= :i_StartDTM
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#15

Re: Überschneidung von Datumsbereichen finden?

  Alt 6. Mai 2004, 21:44
Datumsbereiche sind echt die Hölle - besonders, wenn sich mehrere Tabellen gegenseitig beeinflußen, Ende-Daten auch leer (NULL) sein können (= bis auf weiteres gültig) und man sicherstellen muß, dass zu einem gegebenen Zeitpunkt genau eine priorisierte Zuordnung vorhanden ist (z.B. Kunde mit mehreren Bankverbindungen - genau eine wird für Einzug genutzt, die anderen sind dann inaktiv - nun kommt eine Neue Bankverbindung hinzu und die soll in einem in der Zukunft liegenden Zeitabschnitt prisorisiert werden, danach soll aber wieder die alte Bankverbindung benutzt werden, ohne dass... )

Habe mir eine Funktion gebastelt, die mir da etwas hülft (MSSQL): (*AusNähkästchenKram*)
SQL-Code:
-- liefert 1 zurück, wenn A irgendwie B überlappt, sonst 0
CREATE FUNCTION dbo.fx_A_Hits_B
( @AStart datetime
, @AStop datetime
, @BStart datetime
, @BStop datetime)
RETURNS bit AS
BEGIN
  DECLARE @EndOfTime datetime
        , @BeginOfTime datetime
      SET @EndOfTime = 2958463 -- = 31.12.9999
      SET @BeginOfTime = -53690 -- = 01.01.1753
RETURN (CASE WHEN @AStart < coalesce(@BStop,@EndOfTime)
              AND coalesce(@AStop,@EndOfTime) > coalesce(@BStart,@BeginOfTime)
             THEN 1
             ELSE 0
        END)
END
Gruß

PS: Achso - ich habe in meiner DB alles auf 0:00:00.000 Uhr (Start) bzw. 23:59:59.997 (Stop) gesetzt - daher kein <= und >= sondern nur < und >
Tim Leuschner
Programmierer = moderner Sysiphos: stets wenn er meint, den Stein seiner Dummheit auf den Berg des Wissens gewuchtet zu haben, erblickt er einen völlig neuen Aspekt und der Dummfels poltert mit Getöse zurück ins Tal der Unwissenheit...
  Mit Zitat antworten Zitat
MarkusB

Registriert seit: 3. Apr 2004
Ort: Hamburg
105 Beiträge
 
#16

Re: Überschneidung von Datumsbereichen finden?

  Alt 6. Mai 2004, 22:13
Hi!

@ alcaeus
Du hast den Spaltennamen und den Prüfwert vertauscht und das ist nicht zulässig.
Laut http://www.w3schools.com/sql/sql_between.asp sieht eine gültige Syntax folgendermaßen aus:

SQL-Code:
SELECT column_name FROM table_name
WHERE column_name
BETWEEN value1 AND value2
@ Robert

Viele Grüße
Markus
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#17

Re: Überschneidung von Datumsbereichen finden?

  Alt 7. Mai 2004, 05:58
Zitat von MarkusB:
Hi!

@ alcaeus
Du hast den Spaltennamen und den Prüfwert vertauscht und das ist nicht zulässig.
Laut http://www.w3schools.com/sql/sql_between.asp sieht eine gültige Syntax folgendermaßen aus:

SQL-Code:
SELECT column_name FROM table_name
WHERE column_name
BETWEEN value1 AND value2
@ Robert

Viele Grüße
Markus
Ich wusste das mit between nicht Man kann es aber auch mit >= und <= lösen...
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz