Existe um operador condicional ternário no T-SQL?


112

Quais são as alternativas para implementar a seguinte consulta:

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

4
Claro, a resposta à pergunta que você coloca em seu título é - claro. O BETWEENoperador é definido para receber três argumentos. O que você estava procurando era um operador condicional - que por acaso é o único operador definido para receber três argumentos definidos pela maioria das linguagens.
Damien_The_Unbeliever

1
@JFA - não, um operador ternário é qualquer operador que leve três operandos. Na maioria das linguagens, se eles têm quaisquer operadores ternários, é comum que eles tenham apenas um, que é (geralmente) chamado de operador condicional. Chamar as coisas pelo nome errado (ou usar um nome genérico quando se refere a um específico) pode simplesmente levar a mais confusão. Para obter mais orientações, consulte o wiki de tags do operador ternário .
Damien_The_Unbeliever

@Damien_The_Unbeliever en.wikipedia.org/wiki/Ternary_operation : veja "O operador ternário"
Timothy Kanski

@TimothyKanski - você acha que, considerando o conteúdo e estilo dos meus comentários anteriores (como colocar especial ênfase na a ) que eu sou desconhecem isso?
Damien_The_Unbeliever

6
OP usava o nome comum para uma coisa, não seu nome errado ou muito geral. Não concordo com a sua conclusão de que os profissionais (para os quais este site foi construído) ficarão confusos com isso, quando na verdade é uma terminologia comum.
Timothy Kanski

Respostas:


122

Use case:

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

165

No SQL Server 2012 , você pode usar a IIFfunção :

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

Observe também: no T-SQL, o operador de atribuição (e comparação) é apenas =(e não ==- é C #)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.