Einzelnen Beitrag anzeigen

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