¿Existe un operador condicional ternario en T-SQL?


112

Cuáles son las alternativas para implementar la siguiente consulta:

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

4
Por supuesto, la respuesta a la pregunta que plantea en su título es, por supuesto. El BETWEENoperador está definido para tomar tres argumentos. Lo que estaba buscando era un operador condicional , que resulta ser el único operador definido para tomar tres argumentos definidos por la mayoría de los lenguajes.
Damien_The_Unbeliever

1
@JFA: no, un operador ternario es cualquier operador que toma tres operandos. En la mayoría de los lenguajes, si tienen operadores ternarios, es común que tengan solo uno, que se denomina (generalmente) operador condicional. Llamar a las cosas por un nombre incorrecto (o usar un nombre general cuando te refieres a uno específico) puede generar más confusión. Para obtener más orientación, consulte la wiki de etiquetas de operador ternario .
Damien_The_Unbeliever

@Damien_The_Unbeliever en.wikipedia.org/wiki/Ternary_operation : consulte "EL operador ternario"
Timothy Kanski

@TimothyKanski - ¿crees, considerando el contenido y el estilo de mis comentarios anteriores (como poner especial énfasis en a ) que no estoy al tanto de esto?
Damien_The_Unbeliever

6
OP usó el nombre común para una cosa, no su nombre incorrecto o demasiado general. No estoy de acuerdo con su conclusión de que los profesionales (para quienes se construyó este sitio) estarán confundidos por esto, cuando en realidad es terminología de uso común.
Timothy Kanski

Respuestas:


122

Utilizar case:

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

165

En SQL Server 2012 , puede usar la IIFfunción :

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

También tenga en cuenta: en T-SQL, el operador de asignación (y comparación) es solo =(y no ==, eso es C #)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.