sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man använder IF...THEN Logic i SQL Server

SQL Server har en unik förmåga att tillåta dig att exekvera programmatisk logik i realtid på värdena i din fråga. Baserat på dessa logiska utvärderingar kan du generera olika värden som en del av den returnerade datamängden.

Använda CASE-utlåtandet

Detta görs enklast i alla versioner av SQL Server med CASE sats, som fungerar som en logisk IF...THEN...ELSE uttryck och returnerar olika värden beroende på resultatet.

I det här exemplet nedan vill vi returnera ytterligare en locale kolumn som anger om vår bok utspelar sig i Midgård eller vanliga gamla jorden.

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

Innan vi undersöker det speciella CASE aspekt av detta uttalande, låt oss tillfälligt ta bort CASE att lägga märke till att detta är en extremt enkel SELECT uttalande på ytan:

SELECT
  books.*
FROM
  books

Låt oss därför undersöka hur CASE avsnittet är strukturerat och vilket logiskt beteende vi utför.

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

Till att börja med initialiserar vi CASE ange sedan under vilka villkor (WHEN ) vårt CASE uttalande bör utvärdera ett resultat. I det här exemplet undersöker vi books.title och books.primary_author; om någon av dem passar vårt Tolkien-liknande tema, THEN vi returnerar värdet 'Middle-earth'. Om inget av fälten matchar vår sökning returnerar vi istället värdet på 'Earth'.

Att ordna om logiken som en pseudo-kod IF...THEN...ELSE uttalande, ber vi helt enkelt SQL att utvärdera:

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

Slutligen är det viktigt att komma ihåg att ett CASE sats måste alltid läggas till i slutet med en matchande END påstående. I exemplet ovan döper vi också om det resulterande värdet som returneras till locale , även om det verkligen är valfritt.

Använda IIF-funktionen

Om du använder en modernare version av SQL är det bra att veta att SQL Server 2012 introducerade den mycket praktiska IIF fungera. IIF är en förkortningsmetod för att utföra en IF...ELSE /CASE uttalande och returnera ett av två värden, beroende på utvärderingen av resultatet.

Omstrukturerar vårt exempel ovan för att använda IIF är ganska enkelt.

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

Med en IIF funktion ersätter vi till stor del mycket av det syntaktiska sockret från CASE uttalande med några enkla kommatecken för att skilja våra argument åt.

Allt sagt, båda CASE och IIF få samma jobb gjort, men om du får välja IIF kommer i allmänhet att vara mycket enklare att använda.


  1. Ett sätt att få en indexsökning för ett ledande %jokertecken

  2. Inkrementera primärnyckeln automatiskt i SQL Server Management Studio 2012

  3. TreeView-kontroll med underformulär

  4. Utveckling av feltolerans i PostgreSQL:Synchronous Commit