Thema: Delphi Hilfe bei Abfrage

Einzelnen Beitrag anzeigen

jensw_2000
(Gast)

n/a Beiträge
 
#5

Re: Hilfe bei Abfrage

  Alt 24. Mai 2006, 11:50
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.2007AS DATETIME)
SET @CTD = CAST ('21.01.2008AS 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
  Mit Zitat antworten Zitat