Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zapytanie, aby sprawdzić nakładające się zakresy na serwerze sql?

Najłatwiejszy sposób na znalezienie zachodzenia na siebie jest taki:

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

Można to wykazać, jeśli porównasz powyższy warunek z każdym ze słupków na poniższym diagramie:

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

we wszystkich przypadkach nakładania się, oba te testy są prawdziwe:

  • data rozpoczęcia istniejącego zakresu jest zawsze przed datą zakończenia nowego asortymentu
  • data zakończenia istniejącego zakresu jest po dacie rozpoczęcia nowego asortymentu

Te, które się nie nakładają, nie przechodzą jednego lub drugiego testu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Logika warunkowa w skrypcie PostDeployment.sql przy użyciu SQLCMD

  2. Zwróć wiersze zawierające znaki inne niż alfanumeryczne w SQL Server

  3. Jak uzyskać kalendarz kwartał z daty w TSQL?

  4. Jak wygenerować pole automatycznego przyrostu w wybranym zapytaniu?

  5. Dodawanie tożsamości do istniejącej kolumny