Prüfen ob ein Zeitraum in einen anderen fällt

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von GambaJo.

    Prüfen ob ein Zeitraum in einen anderen fällt

    Hi,
    ich komm grade nicht dahinter wie ich prüfen kann ob ein zeitraum (Von,Bis) in einen anderen Zeitraum (Von,Bis) fällt.
    Also z.B hab ich folgende Date:

    SQL-Abfrage

    1. ID Von Bis
    2. 1 04.04.2011 12:01:00 10.04.2011 15:30:00
    3. 2 06.04.2011 15:30:00 11.04.2011 18:00:00
    4. 3 03.04.2011 18:55:00 07.04.2011 20:00:00


    und jetzt brauch ich bei der Eingabe Von: 01.04.2011 12:00:00 Bis: 06.04.2011 12:00:00 das Ergebniss ID = 2

    ich hoffe man Verstet was ich meine

    Könnte man das filleicht mit einem SQL Befehl machen das man sagt
    Select * from tabelle where von ????? and bis ????

    VB.NET-Quellcode

    1. Dim d1 As Date = Date.Now
    2. Dim d2 As Date = d1.AddHours(1)
    3. Dim d3 As Date = d2.AddHours(1)
    4. If (d2 > d1 AndAlso d3 > d2) Then
    5. ' hier liegt d2 zwischen d1 und d3
    6. End If
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Deathmean schrieb:

    Könnte man das filleicht mit einem SQL Befehl machen das man sagt
    Select * from tabelle where von ????? and bis ????
    vielleicht

    SQL-Abfrage

    1. Select * from tabelle where von < #9/11/2001# and bis >= #9/11/2001#


    Aber mir scheint, du möchtest einen ZeitBereich abfragen. Dazu braucht man eine Liste mit Zeitpunkten. Dein Problem ist vlt, dass deine Liste je Element 2(!) Zeitpunkte hat.

    Willst du nun einen Zeitbereich der Von-Werte abfragen, oder der Bis-Werte? Oder als Untergrenze die Von-Werte nehmen, als Obergrenze die Bis-Werte? Oder als Untergrenze die Bis-Werte nehmen, als Obergrenze die Von-Werte?

    Naja, mal ein Versuch mitte Von-Werte:

    SQL-Abfrage

    1. Select * from tabelle where von > #9/11/2001# and von <= #12/24/2001#
    :thumbsup: Vielen Dank für das Bild! Super Idee - ist mal richtig ne Abwechslung, etwas auf Anhieb zu schnackeln. Wie beschränkt die Schriftsprache doch häufig ist.

    jdfs ich hab da keinen plan, das in sql auszudrücken.

    Das erinnert mich an die Speicherverwaltung von Unix oderso.

    Strategie:
    man müsste von 1 - 4 je den letzten zeitraum abrufen, dessen "bis" kleiner als "input.von" ist. Und den darauf folgenden Zeitraum auch abrufen.
    Und gucken, ob input in die Lücke passt.

    SQL-Abfrage

    1. SELECT * FROM Table Where (Von1 BETWEEN Von2 AND Bis2) OR (Bis1 BETWEEN Von2 AND Bis2)


    oder die Negation davon:

    SQL-Abfrage

    1. SELECT * FROM Table Where (Von1 NOT BETWEEN Von2 AND Bis2) AND (Bis1 NOT BETWEEN Von2 AND Bis2)