Articles

Come usare la logica IF…THEN in SQL Server

Posted on

SQL Server ha una capacità unica che ti permette di eseguire in tempo reale la logica programmatica sui valori all’interno della tua query. Sulla base di queste valutazioni logiche, è possibile generare vari valori come parte del set di dati restituito.

Utilizzando l’istruzione CASE

Questo è più facilmente realizzabile in tutte le versioni di SQL Server utilizzando l’istruzione CASE, che agisce come espressione logica IF...THEN...ELSE e restituisce vari valori a seconda del risultato.

In questo esempio qui sotto, vogliamo restituire un’ulteriore colonna locale che specifica se il nostro libro si svolge nella Terra di Mezzo o nella normale vecchia Terra.

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

Prima di esaminare l’aspetto speciale CASE di questa dichiarazione, rimuoviamo temporaneamente il CASE per notare che questa è una dichiarazione estremamente semplice SELECT in superficie:

SELECT books.*FROM books

Dunque, esaminiamo come è strutturata la sezione CASE e quale comportamento logico stiamo eseguendo.

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

Per iniziare, inizializziamo l’istruzione CASE poi specifichiamo sotto quali condizioni (WHEN) la nostra istruzione CASE dovrebbe valutare un risultato. In questo esempio, stiamo esaminando i campi books.title e books.primary_author; se entrambi corrispondono al nostro tema tolkieniano, THEN restituiamo il valore ‘Terra di Mezzo’. Se nessuno dei due campi corrisponde alla nostra ricerca, restituiamo invece il valore ‘Terra.’

Per riorganizzare la logica come una dichiarazione psuedo-codice IF...THEN...ELSE, stiamo semplicemente chiedendo a SQL di valutare:

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

Infine, è fondamentale ricordare che una dichiarazione CASE deve sempre essere aggiunta alla fine con una dichiarazione END corrispondente. Nell’esempio precedente, stiamo anche rinominando il valore risultante che viene restituito in locale, anche se questo è certamente opzionale.

Utilizzando la funzione IIF

Se si utilizza una versione più moderna di SQL, è utile sapere che SQL Server 2012 ha introdotto la funzione molto utile IIFIIF è un metodo abbreviato per eseguire un’istruzione IF...ELSECASE e restituire uno dei due valori, a seconda della valutazione del risultato.

Ristrutturare il nostro esempio precedente per utilizzare IIF è abbastanza semplice.

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

Con una funzione IIF, sostituiamo gran parte dello zucchero sintattico della dichiarazione CASE con qualche semplice virgola-seperatore per differenziare i nostri argomenti.

Tutto sommato, sia CASE che IIF fanno lo stesso lavoro, ma se si può scegliere, IIF sarà generalmente molto più semplice da usare.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *