sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man skriver om ÄR SKILJER FRÅN och SKILJER INTE FRÅN?

IS DISTINCT FROM predikatet introducerades som funktion T151 i SQL:1999, och dess läsbara negation, IS NOT DISTINCT FROM , lades till som funktion T152 i SQL:2003. Syftet med dessa predikat är att garantera att resultatet av att jämföra två värden antingen är Sant eller False , aldrig Okänd .

Dessa predikat fungerar med alla jämförbara typer (inklusive rader, arrayer och multiset) vilket gör det ganska komplicerat att efterlikna dem exakt. SQL Server stöder dock inte de flesta av dessa typer, så vi kan komma ganska långt genom att leta efter null-argument/operander:

  • a IS DISTINCT FROM b kan skrivas om som:

    ((a <> b OR a IS NULL OR b IS NULL) AND NOT (a IS NULL AND b IS NULL))
    
  • a IS NOT DISTINCT FROM b kan skrivas om som:

    (NOT (a <> b OR a IS NULL OR b IS NULL) OR (a IS NULL AND b IS NULL))
    

Ditt eget svar är felaktigt eftersom det inte beaktar att FALSE OR NULL utvärderas till Okänd . Till exempel, NULL IS DISTINCT FROM NULL bör utvärderas till False . På liknande sätt skiljer sig 1 IS NOT DISTINCT FROM NULL bör utvärderas till False . I båda fallen ger dina uttryck Okänt .



  1. Användarkontohantering, roller, behörigheter, autentisering PHP och MySQL - Del 6

  2. Tidszonnamn med identiska egenskaper ger olika resultat när de tillämpas på tidsstämpel

  3. Count(*) vs Count(1) - SQL Server

  4. SQL-serverlogg, leverans och katastrofåterställning, installation och konfiguration -1