sql >> Base de Datos >  >> RDS >> Sqlserver

¿Consulta para verificar rangos superpuestos en el servidor sql?

La forma más fácil de encontrar una superposición es así:

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

Se puede demostrar que esto funciona si compara la condición anterior con cada una de las barras en el siguiente diagrama:

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

en todos los casos de superposición, ambas pruebas son verdaderas:

  • la fecha de inicio del intervalo existente siempre es anterior a la fecha de finalización de la nueva gama
  • la fecha de finalización del intervalo existente es posterior a la fecha de inicio de la nueva gama

Aquellos que no se superponen fallan en una u otra de esta prueba.