sql >> Database >  >> RDS >> Sqlserver

Vraag om overlappende bereiken in sql-server te controleren?

De gemakkelijkste manier om een ​​overlap te vinden is als volgt:

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

Dit kan worden aangetoond dat het werkt als u de bovenstaande voorwaarde vergelijkt met elk van de balken in het onderstaande diagram:

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

in alle overlapgevallen zijn beide tests waar:

  • de startdatum van het bestaande bereik is altijd vóór de einddatum van het nieuwe assortiment
  • de einddatum van het bestaande bereik is na de startdatum van het nieuwe assortiment

Degenen die elkaar niet overlappen, slagen voor een van deze tests.



  1. Rails:implementatie naar Heroku, veel problemen

  2. Tel inhoud in jaarmaandarchief met behulp van PHP

  3. MySQL:is er een limiet voor de vermeldingen van een IN-clausule?

  4. Oracle JDBC:onderstroom in dubbel