sql >> Database teknologi >  >> RDS >> Sqlserver

Forespørgsel om at kontrollere overlappende områder i sql-server?

Den nemmeste måde at finde et overlap på er sådan her:

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

Dette kan vise sig at virke, hvis du sammenligner betingelsen ovenfor med hver af søjlerne i diagrammet nedenfor:

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

i alle overlapstilfælde er begge disse test sande:

  • startdatoen af det eksisterende interval er altid før slutdatoen af det nye udvalg
  • slutdatoen af det eksisterende interval er efter startdatoen af det nye udvalg

De, der ikke overlapper hinanden, består den ene eller den anden af ​​denne test.



  1. EF Core konfigurationsproblem med ejet type brugt i 2 forskellige klasser

  2. Hvad er et indeks i SQL?

  3. BLOB i MySQL-visning i stedet for de korrekte data

  4. mySQL - Skal jeg denormalisere?