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 >