sql >> Databáze >  >> RDS >> Sqlserver

Dotaz na kontrolu překrývajících se rozsahů na serveru SQL?

Nejjednodušší způsob, jak najít překrytí, je tento:

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

To lze ukázat, že to funguje, pokud porovnáte podmínku výše s každým z pruhů v níže uvedeném diagramu:

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

ve všech případech překrývání platí oba tyto testy:

  • datum zahájení existujícího rozsahu je vždy před datem ukončení nové řady
  • datum ukončení ze stávajícího rozsahu je po datu zahájení nové řady

Ty, které se nepřekrývají, selžou v jednom nebo druhém z tohoto testu.



  1. Povolená velikost paměti 134217728 bajtů je vyčerpána (pokuseno alokovat 42 bajtů)

  2. Z nějakého důvodu došlo k přerušení dotazu SQL

  3. MySQL Vytvářejte příkazy View, Nahraďte View a Drop View s příklady

  4. Odstraňte řádky tabulky zadané v textovém souboru v Postgresu