sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo funciona IIF() en SQL Server

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.