En SQL Server, el IIF()
función (que no debe confundirse con IF
declaración) es una función condicional que devuelve el segundo o tercer argumento basado en la evaluación del primer argumento.
Es una forma abreviada de escribir un CASE
expresión. Es lógicamente equivalente a CASE WHEN X THEN Y ELSE Z END
asumiendo IIF(X, Y, Z)
.
IIF()
es una abreviatura de IF inmediato .
Sintaxis
La sintaxis es así:
IIF ( boolean_expression, true_value, false_value )
donde:
- expresión_booleana es la expresión a evaluar.
- valor_verdadero se devuelve si expresión_booleana es verdad.
- valor_falso se devuelve si expresión_booleana es falso o desconocido.
Al igual que con CASE
expresiones, IIF()
las declaraciones solo se pueden anidar hasta el nivel máximo de 10.
Ejemplo
Aquí hay un ejemplo básico para demostrar cómo IIF()
funciona.
SELECT IIF( 1 < 2, 'True', 'False' );
Resultado:
True
En este caso, la expresión a evaluar es 1 < 2
. Es cierto que 1 es menor que 2, por lo que se devolvió el segundo argumento.
Esto es el equivalente a hacer lo siguiente.
SELECT
CASE WHEN 1 < 2 THEN 'True'
ELSE 'False'
END;
Resultado:
True
En estos ejemplos, usé las palabras "Verdadero" y "Falso", pero podría haber usado cualquier cosa.
Por ejemplo, podría haber hecho esto en su lugar:
SELECT IIF( 1 < 2, 'Fail', 'Pass' );
Resultado:
Fail
O podría ser algo completamente eliminado de una respuesta de tipo binario "verdadero" o "falso".
Por ejemplo:
SELECT IIF( 1 < 2, 'Deadlift', 'Bench Press' );
Resultado:
Deadlift
Probar una variable
En la práctica, normalmente probaría variables, columnas, etc. en lugar de constantes como en los ejemplos anteriores.
Aquí hay un ejemplo que prueba una variable.
DECLARE @bankBalance int = 123;
SELECT IIF(@bankBalance > 100, 'Rich!', 'Poor');
Resultado:
Rich!
Ejemplo de base de datos
Aquí hay un ejemplo que usa columnas de una base de datos.
SELECT TOP(10)
Name,
Population,
IIF(
Population > 400000,
'Big City',
'Small City'
) AS 'Big/Small'
FROM city;
Resultado:
+----------------+--------------+-------------+ | Name | Population | Big/Small | |----------------+--------------+-------------| | Kabul | 1780000 | Big City | | Qandahar | 237500 | Small City | | Herat | 186800 | Small City | | Mazar-e-Sharif | 127800 | Small City | | Amsterdam | 731200 | Big City | | Rotterdam | 593321 | Big City | | Haag | 440900 | Big City | | Utrecht | 234323 | Small City | | Eindhoven | 201843 | Small City | | Tilburg | 193238 | Small City | +----------------+--------------+-------------+
Funciones IIF() anidadas
Aquí hay un ejemplo de cómo anidar un IIF()
función. Por "anidar" quiero decir que paso otro IIF()
funcionan como un argumento para el IIF()
externo función.
DECLARE @bankBalance int = 123;
SELECT IIF(
@bankBalance > 100,
IIF(@bankBalance > 150, 'Rich!', 'Wealthy'),
'Poor'
);
Resultado:
Wealthy
Puede anidar IIF()
funciones hasta un nivel de 10.