Articles

Jak używać logiki IF…THEN w SQL Server

Posted on

SQL Server posiada unikalną możliwość wykonywania w czasie rzeczywistym logiki programowej na wartościach zawartych w zapytaniu. Na podstawie tych logicznych obliczeń, możesz wygenerować różne wartości jako część zwróconego zestawu danych.

Użycie wyrażenia CASE

Jest to najłatwiejsze do osiągnięcia we wszystkich wersjach SQL Server przy użyciu instrukcji CASE, która działa jako 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ć dodatkową kolumnę locale, która określa, czy nasza książka rozgrywa 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 zbadamy specjalny CASE aspekt tego stwierdzenia, usuńmy tymczasowo CASE, aby zauważyć, że jest to niezwykle proste SELECT oświadczenie na powierzchni:

SELECT books.*FROM books

Zbadajmy zatem, jak zbudowana jest sekcja CASE 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 inicjalizujemy instrukcję CASE, a następnie określamy, w jakich warunkach (WHEN) nasza instrukcja CASE powinna otrzymać wynik. W tym przykładzie badamy books.title i books.primary_author; jeśli któreś z nich pasuje do naszego tolkienowskiego tematu, THEN zwracamy wartość 'Middle-earth.' Jeśli żadne z pól nie pasuje do naszego wyszukiwania, zamiast tego zwracamy wartość 'Earth.

Aby przeorganizować logikę jako psuedo-kod 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 instrukcja CASE musi być zawsze dołączona na końcu z pasującą do niej instrukcją END. W powyższym przykładzie zmieniamy również nazwę zwracanej wartości na locale, choć jest to oczywiście opcjonalne.

Używanie funkcji IIF

Jeśli używasz bardziej nowoczesnej wersji SQL, warto wiedzieć, że SQL Server 2012 wprowadził bardzo przydatną funkcję IIFIIF to skrócona metoda wykonywania instrukcji IF...ELSECASE i zwracania jednej z dwóch wartości, w zależności od oceny wyniku.

Restrukturyzacja naszego powyższego przykładu w celu użycia IIF jest dość prosta.

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

W przypadku funkcji IIF, w dużej mierze zastępujemy wiele cukru składniowego z deklaracji CASE kilkoma prostymi przecinkami-separatorami, aby rozróżnić nasze argumenty.

Wszystko wskazuje na to, że zarówno CASE jak i IIF wykonują tę samą pracę, ale jeśli mamy wybór, IIF będzie znacznie prostszy w użyciu.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *