Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Datumsbereich, der zwischen zwei Datumsangaben in einer LINQ-Abfrage liegt

Deine Anforderungen sind mir nicht 100% klar. In Ihrer Eröffnungszeile haben Sie nach Datensätzen gefragt, "wo der Eingabedatumsbereich zwischen zwei Datumsfelder fällt", aber in der Zeile "Zusätzlich" implizieren Sie, dass Sie keine Datensätze zurückgeben möchten, bei denen das Startdatum des Termins nicht gleich ist das Enddatum Ihrer Eingabe. Ich nehme an, dass dies zwei verschiedene Anforderungen sind, also gebe ich Ihnen zwei verschiedene Abfragen.

Die erste Abfrage lautet:

    from t1 in db.Appointments
    where date1 >= t1.AppointmentStart
    where date2 <= t1.AppointmentEnd
    select t1;

Die zweite Abfrage lautet:

    from t1 in db.Appointments
    where date2 > t1.AppointmentStart
    where date1 < t1.AppointmentEnd
    select t1;

Die erste Abfrage gibt Datensätze zurück, die die Eingabedaten "enthalten".

Die zweite Abfrage gibt Datensätze zurück, die sich mit den Eingabedaten "überschneiden".

Ich denke, es ist sinnvoller, dass Sie die Überlappungsabfrage möchten und diese Ihre Anforderung "14:00 - 15:00 gibt keinen Wert für 15:00-16:00 zurück" erfüllt.

Lassen Sie mich wissen, wenn ich Ihre Anforderungen falsch verstanden habe und Änderungen vornehmen muss.