Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Consulta para verificar intervalos sobrepostos no sql server?


A maneira mais fácil de encontrar uma sobreposição é assim:
IF EXISTS (SELECT 1 FROM table WHERE @myValueLo <= ExistingRangeEnd AND @myValueHi >= ExistingRangeStart)
  -- Overlaps
ELSE
  -- Doesn't overlap

Isso pode ser mostrado para funcionar se você comparar a condição acima com cada uma das barras no diagrama abaixo:
Existing range:         |-------------------|
Overlaps:       |-------------|       |------------|
                |----------------------------------|
                           |-------------|
Not overlaps:   |-----|                       |----|

em todos os casos de sobreposição, ambos os testes são verdadeiros:
  • a data de início do intervalo existente é sempre anterior à data de término do novo intervalo
  • a data de término do intervalo existente é posterior à data de início do novo intervalo

Aqueles que não se sobrepõem falham em um ou outro deste teste.