Esiste un operatore condizionale ternario in T-SQL?


112

Quali sono le alternative per implementare la seguente query:

select *  
from table  
where isExternal = @type = 2 ? 1 : 0

4
Naturalmente, la risposta alla domanda che poni nel titolo è - ovviamente. L' BETWEENoperatore è definito per accettare tre argomenti. Quello che stavi cercando era un operatore condizionale , che sembra essere l'unico operatore definito per accettare tre argomenti definiti dalla maggior parte delle lingue.
Damien_The_Unbeliever

1
@JFA - no, un operatore ternario è un operatore che accetta tre operandi. Nella maggior parte delle lingue, se hanno operatori ternari, è comune che ne abbiano solo uno, che è (generalmente) chiamato operatore condizionale. Chiamare le cose con il nome sbagliato (o usare un nome generico quando intendi uno specifico) può solo portare a maggiore confusione. Per ulteriori indicazioni, consultare il wiki del tag operatore ternario .
Damien_The_Unbeliever

@Damien_The_Unbeliever en.wikipedia.org/wiki/Ternary_operation : vedi "THE
ternary

@TimothyKanski - pensi, considerando il contenuto e lo stile dei miei commenti precedenti (come porre un'enfasi particolare sulla a ) che io non ne sia a conoscenza?
Damien_The_Unbeliever

6
OP ha usato il nome comune per una cosa, non il suo nome sbagliato o troppo generico. Non sono d'accordo con la tua conclusione secondo cui i professionisti (per i quali questo sito è stato costruito) saranno confusi da questo, quando è effettivamente una terminologia comunemente usata.
Timothy Kanski

Risposte:


122

Usa case:

select *
from table
where isExternal = case @type when 2 then 1 else 0 end

165

In SQL Server 2012 è possibile utilizzare la IIFfunzione :

SELECT *
FROM table
WHERE isExternal = IIF(@type = 2, 1, 0)

Nota anche: in T-SQL, l'operatore di assegnazione (e confronto) è solo =(e non ==- è C #)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.