Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Query per verificare gli intervalli sovrapposti nel server sql?

Il modo più semplice per trovare una sovrapposizione è questo:

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

Questo può essere mostrato per funzionare se confronti la condizione sopra con ciascuna delle barre nel diagramma seguente:

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

in tutti i casi di sovrapposizione, entrambi questi test sono veri:

  • la data di inizio dell'intervallo esistente è sempre prima della data di fine della nuova gamma
  • la data di fine dell'intervallo esistente è successivo alla data di inizio della nuova gamma

Quelli che non si sovrappongono non superano l'uno o l'altro di questo test.