Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Заявка за проверка на припокриващи се диапазони в sql сървър?

Най-лесният начин да намерите припокриване е следният:

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

Може да се докаже, че това работи, ако сравните условието по-горе с всяка от лентите в диаграмата по-долу:

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

във всички случаи на припокриване и двата теста са верни:

  • началната дата от съществуващия диапазон винаги е преди крайната дата от новата гама
  • крайната дата от съществуващия диапазон е след началната дата от новата гама

Тези, които не се припокриват, се провалят на един или друг от този тест.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. АКТУАЛИЗИРАНЕ, ако съществува друго INSERT в SQL Server 2008

  2. sql сървър 2008 активира sa акаунт

  3. Разработки на виртуална машина Azure за използване на SQL Server

  4. Функция за сигурност в облака Spotlight - Премахване на литерали

  5. Как да конвертирате между формати на дата в SQL Server с помощта на CAST()