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

Abfrage zum Überprüfen überlappender Bereiche in SQL Server?

Der einfachste Weg, eine Überlappung zu finden, ist wie folgt:

IF EXISTS (SELECT 1 FROM table WHERE @myValueLo <= ExistingRangeEnd AND @myValueHi >= ExistingRangeStart)
  -- Overlaps
ELSE
  -- Doesn't overlap

Das funktioniert, wenn Sie die obige Bedingung mit jedem der Balken im folgenden Diagramm vergleichen:

Existing range:         |-------------------|
Overlaps:       |-------------|       |------------|
                |----------------------------------|
                           |-------------|
Not overlaps:   |-----|                       |----|

in allen Überschneidungsfällen sind diese beiden Tests wahr:

  • das Startdatum des bestehenden Bereichs liegt immer vor dem Enddatum des neuen Sortiments
  • das Enddatum des vorhandenen Bereichs liegt nach dem Startdatum des neuen Sortiments

Diejenigen, die sich nicht überschneiden, bestehen den einen oder anderen dieser Tests nicht.