Einen Ansatz habe ich eben kurz erarbeitet.
Hoffentlichbringt er dich weiter.
SQL-Code:
SET LANGUAGE GERMAN
declare @VM INT -- @VM = "existierender Eintrag" VON_MONAT
declare @TM INT -- @TM = "existierender Eintrag" BIS_MONAT
declare @VJ INT -- @VJ = "existierender Eintrag" VON_JAHR
declare @TJ INT -- @TJ = "existierender Eintrag" BIS_JAHR
declare @VD DATETIME -- @VD = "existierender Eintrag" VON_DATUM (DATETIME)
declare @TD DATETIME -- @TD = "existierender Eintrag" BID_DATUM (DATETIME)
declare @CVD DATETIME -- @CVD = "neuer Eintrag" VON_DATUM
declare @CTD DATETIME -- @CTD = "neuer Eintrag" BIS_DATUM
-- Variablen mit Testwerten füllen
SET @VM = 06
SET @TM = 03
SET @VJ = 2005
SET @TJ = 2007
SET @CVD = CAST ('01.03.2007' AS DATETIME)
SET @CTD = CAST ('21.01.2008' AS DATETIME)
-- von_Monat und von_Jahr des existierenden Eintrags in DATETIME konvertieren
SET @VD = CAST ('01.'+ CAST(@VM AS VARCHAR(2)) +'.'+ CAST(@VJ AS VARCHAR(4)) AS DATETIME )
-- bis_Monat und bis_Jahr des existierenden Eintrags in DATETIME konvertieren
-- dazu nehme ich den 1. des Folgemonats - 1 Tag
SET @TD = DATEADD(DAY,-1,CAST ('01.'+ CAST(@TM +1 AS VARCHAR(2)) +'.'+ CAST(@TJ AS VARCHAR(4)) AS DATETIME ))
-- Testausgabe "von_Datum", "bis_Datum" in DATETIME Format
SELECT @VD AS [VON_DATUM], @TD AS [BIS_DATUM]
-- Püfen ob die Gültigkeitszeit des neuen Preises mit der Gültigkeitszeit des exstierenden Preises überschneidet
-- gibt 1 zurück, wenn sich Datumsbereiche überschneiden
-- gibt 0 zurück, wenn sich keine Datumsbereiche überschneiden
SELECT CAST ( CASE WHEN -- neues Beginndatum zwischen Von_Datum und Bis_Datum
( @CVD BETWEEN @VD AND @TD ) OR
-- neues Enddatum zwischen Von_Datum und Bis_Datum
( @CTD BETWEEN @VD AND @TD ) OR
-- neues Datum zwischen komplett zwischen Von_Datum und Bis_Datum
( @CVD < @VD AND @CTD > @TD)
THEN 1
ELSE 0
END
AS BIT
) AS [VORSICHT_GeltungsZeitUeberschneidung]
-- Test fertig :o)
-- Jetzt muss man das ganze noch nett in eine UDF und eine SP verpacken und dann wirds benutzbar