sql >> Databasteknik >  >> RDS >> Sqlserver

Överlappande kontrollbegränsning för datumintervall

KONTROLLEN körs efter raden har infogats, så intervallet överlappar sig självt.

Du måste ändra din WHERE för att inkludera något som:@MyTableId <> MyTableId .

BTW, ditt WHERE-uttryck kan förenklas.

Områden gör det inte överlappar om:

  • slutet av det ena intervallet är före början av det andra
  • eller början av det ena intervallet är efter slutet av det andra.

Som skulle kunna skrivas i SQL som:

WHERE @DateEnd < DateStart OR DateEnd < @DateStart

Negera det för att få de intervall som gör överlappar...

WHERE NOT (@DateEnd < DateStart OR DateEnd < @DateStart)

...vilket enligt De Morgans lagar är detsamma som...

WHERE NOT (@DateEnd < DateStart) AND NOT (DateEnd < @DateStart)

...vilket är samma sak som:

WHERE @DateEnd >= DateStart AND DateEnd >= @DateStart

Så din sista VAR bör vara:

WHERE
    @MyTableId <> MyTableId
    AND @DateEnd >= DateStart
    AND DateEnd >= @DateStart

[SQL-fiol]

OBS:för att tillåta intervall att "berörda", använd <= i startuttrycket, vilket skulle producera > i det slutliga uttrycket.



  1. Hur installerar man ett Python-paket på Linux så att det hittas av den redan fungerande PostgreSQL 13 plpython3u-tillägget?

  2. Oracle Forms i R12/R12.2

  3. SQL välj endast rader med maxvärde på en kolumn

  4. PostgreSQL-anonymisering på begäran