Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak używać IF...THEN Logic w SQL Server

SQL Server ma unikalną możliwość wykonywania w czasie rzeczywistym logiki programistycznej na wartościach w zapytaniu. Na podstawie tych logicznych ocen możesz generować różne wartości jako część zwróconego zestawu danych.

Korzystanie z instrukcji CASE

Jest to najłatwiejsze we wszystkich wersjach SQL Server przy użyciu CASE instrukcja, która działa jak logiczne IF...THEN...ELSE wyrażenie i zwraca różne wartości w zależności od wyniku.

W poniższym przykładzie chcemy zwrócić dodatkowe locale kolumna, która określa, czy nasza książka dzieje się w Śródziemiu, czy w zwykłej Starej Ziemi.

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

Zanim przyjrzymy się specjalnemu CASE aspekt tego stwierdzenia, tymczasowo usuńmy CASE aby zauważyć, że jest to niezwykle prosty SELECT oświadczenie na powierzchni:

SELECT
  books.*
FROM
  books

Dlatego przyjrzyjmy się, jak CASE sekcja jest ustrukturyzowana i jakie logiczne zachowanie wykonujemy.

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

Na początek inicjujemy CASE oświadczenie, a następnie określ, na jakich warunkach (WHEN ) nasz CASE oświadczenie powinno oceniać wynik. W tym przykładzie sprawdzamy books.title i books.primary_author; jeśli któryś pasuje do naszego tolkienowskiego motywu, THEN zwracamy wartość „Śródziemie”. Jeśli żadne z pól nie pasuje do naszego wyszukiwania, zamiast tego zwracamy wartość „Ziemia”.

Aby zmienić logikę jako pseudokod IF...THEN...ELSE oświadczenie, po prostu prosimy SQL o ocenę:

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

Na koniec należy pamiętać, że CASE oświadczenie musi być zawsze dołączone na końcu z pasującym END oświadczenie. W powyższym przykładzie zmieniamy również nazwę wynikowej wartości zwracanej do locale , choć jest to z pewnością opcjonalne.

Korzystanie z funkcji IIF

Jeśli używasz bardziej nowoczesnej wersji SQL, warto wiedzieć, że SQL Server 2012 wprowadził bardzo przydatny IIF funkcjonować. IIF jest skróconą metodą wykonywania IF...ELSE /CASE oświadczenie i zwrócenie jednej z dwóch wartości, w zależności od oceny wyniku.

Restrukturyzacja naszego powyższego przykładu, aby użyć IIF jest dość proste.

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

Z IIF funkcji, w dużej mierze zastępujemy dużo cukru składniowego z CASE oświadczenie z kilkoma prostymi separatorami przecinkami, aby odróżnić nasze argumenty.

Wszystko powiedziane, oba CASE i IIF wykonaj tę samą pracę, ale jeśli masz wybór, IIF ogólnie będzie znacznie prostszy w użyciu.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Filtrowanie według opcji OFFSET-FETCH w zapytaniu Select — samouczek SQL Server / TSQL, część 118

  2. Jak wybrać określoną liczbę znaków z lewej lub prawej strony ciągu w SQL Server?

  3. datetime2 vs datetimeoffset w SQL Server:jaka jest różnica?

  4. Jak przekonwertować listę rozdzielaną przecinkami na wiersze w SQL Server

  5. Jak zmienić nazwę czegoś w SQL Server, co ma w nazwie nawiasy kwadratowe?