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

Sådan bruges IF...THEN Logic i SQL Server

SQL Server har en unik evne til at give dig mulighed for at udføre real-time programmatisk logik på værdierne i din forespørgsel. Baseret på disse logiske evalueringer kan du generere forskellige værdier som en del af det returnerede datasæt.

Brug af CASE-erklæringen

Dette opnås nemmest i alle versioner af SQL Server ved at bruge CASE sætning, der fungerer som en logisk IF...THEN...ELSE udtryk og returnerer forskellige værdier afhængigt af resultatet.

I dette eksempel nedenfor ønsker vi at returnere en yderligere locale kolonne, der specificerer, om vores bog finder sted i Midgård eller almindelige gamle Jord.

SELECT
  CASE
    WHEN
      books.title = 'The Hobbit'
        THEN
          'Middle-earth'
    WHEN
      books.primary_author = 'Tolkien'
        THEN
          'Middle-earth'
    ELSE
      'Earth'
  END AS locale,
  books.*
FROM
  books

Før vi undersøger den særlige CASE aspekt af denne erklæring, lad os midlertidigt fjerne CASE at bemærke, at dette er en ekstrem simpel SELECT udsagn på overfladen:

SELECT
  books.*
FROM
  books

Lad os derfor undersøge, hvordan CASE afsnittet er struktureret, og hvilken logisk adfærd vi udfører.

CASE
  WHEN
    books.title = 'The Hobbit'
      THEN
        'Middle-earth'
  WHEN
    books.primary_author = 'Tolkien'
      THEN
        'Middle-earth'
  ELSE
    'Earth'
END AS locale

Til at begynde med initialiserer vi CASE sætning angiv derefter under hvilke betingelser (WHEN ) vores CASE erklæring skal evaluere et resultat. I dette eksempel undersøger vi books.title og books.primary_author; hvis begge passer til vores Tolkien-agtige tema, THEN vi returnerer værdien 'Middle-earth'. Hvis ingen af ​​felterne matcher vores søgning, returnerer vi i stedet værdien 'Earth'.

At omarrangere logikken som en psuedo-kode IF...THEN...ELSE sætning, beder vi simpelthen SQL om at evaluere:

IF
  title == 'The Hobbit' OR
  primary_author == 'Tolkien'
THEN
  RETURN 'Middle-earth'
ELSE
  RETURN 'Earth'
END

Endelig er det vigtigt at huske, at en CASE sætning skal altid tilføjes i slutningen med en matchende END udmelding. I ovenstående eksempel omdøber vi også den resulterende værdi, der returneres til locale , selvom det bestemt er valgfrit.

Brug af IIF-funktionen

Hvis du bruger en mere moderne version af SQL, er det nyttigt at vide, at SQL Server 2012 introducerede den meget praktiske IIF fungere. IIF er en stenografimetode til at udføre en IF...ELSE /CASE sætning og returnering af en af ​​to værdier, afhængigt af evalueringen af ​​resultatet.

Omstrukturering af vores eksempel ovenfor til at bruge IIF er ret simpelt.

SELECT
  IIF(
    books.title = 'The Hobbit' OR books.primary_author = 'Tolkien',
    'Middle-earth',
    'Earth')
  AS locale,
  books.*
FROM
  books

Med en IIF funktion erstatter vi stort set meget af det syntaktiske sukker fra CASE udsagn med et par simple komma-separatorer for at adskille vores argumenter.

Alt i alt, begge CASE og IIF få det samme arbejde udført, men hvis du får valget, IIF vil generelt være meget nemmere at bruge.


  1. Specialtegn i MySQL-tabelnavn

  2. Risiko ved brug af dynamisk hukommelse i Hyper-V

  3. Hvor værdi i kolonne, der indeholder kommaseparerede værdier

  4. GETDATE() Eksempler i SQL Server (T-SQL)