SQL Server 2012 introdujo una nueva función lógica incorporada SQL IIF. Es una forma abreviada de escribir lógica de sentencia de caso o lógica IF-ELSE.
exploramos la sentencia Case en SQL en mi artículo anterior. Utilizamos una sentencia case para devolver un resultado basado en la condición definida. Es similar a un IF..ELSE evaluates then la instrucción evalúa una expresión y devuelve la salida. La instrucción case está disponible en casi todas las versiones de SQL Server.
exploremos esta función SQL IIF en este artículo.,
descripción general de la instrucción SQL IIF
utilizamos el siguiente formato para escribir la lógica de la instrucción Case en consultas SQL
seleccionar la expresión CASE cuando expression1 luego Result1 cuando expression2 luego Result2 ELSE ELSE Result END
Podemos escribir este código usando la sintaxis de la instrucción SQL IIF de la siguiente manera.
IIF (boolean_expression, true_value, false_value)
- Boolean_expression: el primer parámetro en la instrucción SQL IIF es una expresión booleana., Debe ser una expresión booleana válida de lo contrario obtenemos una excepción
- True_Value: si la expresión booleana es verdadera, devuelve el valor especificado en el parámetro true_value
- False_Value: si la expresión booleana es falsa, devuelve el valor especificado en el parámetro false_value
exploremos la instrucción SQL IIF usando ejemplos.
ejemplo 1: instrucción SQL IIF para comparar valores enteros
en el siguiente ejemplo, la expresión booleana especificada devuelve False (2>3 no es TRUE)., Due to this, it returns the value specified in the false_value parameter.
1
|
SELECT IIF(2 > 3, ‘TRUE’, ‘FALSE’ )
|
Similarly, if the condition is TRUE (5>3 is TRUE) so it returns the value of true_value parameter.,
1
|
SELECT IIF(5 > 3, ‘TRUE’, ‘FALSE’ )
|
Example 2: SQL IIF statement with variables
In the following example, we specified two integer variables and assigned values. We use variables for comparison in the IIF statement.,
1
2
|
DECLARE @A INT = 80, @B INT = 70
SELECT IIF(@A >= @B, ‘PASS’, ‘FAIL’ )
|
The specified condition (80>70) is TRUE, so it returns the value PASS.,
Ejemplo 3: instrucción SQL IIF para comparar dos cadenas
en el siguiente ejemplo, queremos comparar los datos de cadena usando la instrucción SQL IIF. Queremos saber la persona que le gusta basado en el nombre de la persona.,
1
2
|
DECLARE @Person Varchar(100) = ‘Raj’
SELECT IIF(@Person=’Raj’,’Likes Apple’,’NA’)
|
We can specify multiple conditions in SQL IIF statement as well.,i>
1
2
|
DECLARE @Person Varchar(100) = ‘Raj’
SELECT IIF(@Person in(‘Raj’, ‘Mohan’),’Likes Apple’,’Likes Orange’)
|
The query should return Likes Orange if the person name is not in the IN clause., En el siguiente ejemplo, person Vinay no existe en la variable @Person, por lo que devuelve el valor de una cláusula falsa.
Ejemplo 4: instrucción SQL IIF anidada
También podemos usar la instrucción SQL IIF anidada para especificar múltiples condiciones
en esta función SQL IIF, comprueba la primera condición y si la condición es verdadera, devuelve el valor. En nuestro caso, es FALSE ( Person Vinay no coincide con Raj). comprueba la otra condición y devuelve los resultados si es TRUE.,
Si ninguna de las condiciones es true, devuelve el valor predeterminado false mensaje.
Ejemplo 5: SQL instrucción IIF con una columna de la tabla
En los ejemplos anteriores, podemos especificar los valores directamente en la instrucción IIF o especificado variables para ella. Por lo general, queremos usarlo con los datos existentes en una tabla SQL. También podemos usar la instrucción IIF con una columna de tabla.,
en el siguiente ejemplo, queremos saber el nombre del proveedor de la tabla PurchaseOrders en la base de datos WideWorldImporters.
Si el nombre del proveedor no existe para un ID de Proveedor en particular, devuelve el valor false especificado en la instrucción SQL IIF.
ejemplo 6: instrucción SQL IIF con una columna de tabla y una función agregada
Ejemplo 7: instrucción SQL IIF y precedencia de tipo de datos
es posible que tengamos diferentes tipos de datos para los resultados., Si tenemos diferentes tipos de datos especificados en las condiciones de resultado, SQL Server da el tipo de datos de mayor prioridad. En el siguiente ejemplo, para la condición false (11>19), el resultado será el argumento false_value, es decir, 100. Debe ser de tipo de datos e integer, pero obtenemos la salida 40.0 porque el otro argumento float (2.6) es de alta precedencia que un entero.,
1
|
SELECT IIF(11 > 19, 2.6, 40)
|
You can check the data type precedence in the following image
Example 8: SQL IIF with NULL values
We should be careful in NULL values inside the SQL IIF function.,
1
2
3
|
SELECT
IIF(100 > 99, NULL, NULL) AS Result;
|
We cannot specify NULL in both the true and false arguments. We get the following error message.,
Msg 8133, nivel 16, estado 1, Línea 1 al menos una de las expresiones de resultado en una especificación CASE debe ser una expresión que no sea la constante NULL.
en el mensaje de error, puede ver que da información sobre la especificación del caso, sin embargo, usamos la función SQL IIF. Veremos esto en el siguiente ejemplo.
debe especificar al menos uno de los argumentos true o false.,
1
2
|
SELECT
IIF(100 > 99, ‘Hello’, NULL) AS Result;
|
The similarity between SQL IIF statement and CASE Statement
In the introduction of SQL IIF Statement, we mentioned that it is a shorthand form of writing CASE statement logic or IF-ELSE logic., Sí, es verdad. SQL Server convierte internamente la instrucción en la instrucción CASE y la ejecuta. Podemos comprobarlo usando el plan de ejecución real de una consulta.
ejecute la consulta del Ejemplo 6 con un plan de ejecución Real.
En el plan de ejecución real, mirar las propiedades de Calcular Escalar. Puede ver que ejecuta la instrucción CASE internamente.
conclusión
en este artículo, exploramos la instrucción SQL IIF que es una nueva forma de escribir condiciones relacionadas con la instrucción CASE., Está disponible a partir de SQL 2012. Usted debe explorar esto para estar familiarizado con esto. Si tiene algún comentario o pregunta, no dude en dejarlos en los comentarios a continuación.,
- Autor
- mensajes Recientes
Ver todos los mensajes por Rajendra Gupta
- la Realización de menor y mayor actualización de la versión para AWS RDS SQL Server – 29 de enero de 2021
- la Implementación de AWS RDS para PostgreSQL instancias – 27 de enero de 2021
- la Migración de las instalaciones de la bases de datos de SQL AWS RDS de SQL Server mediante el uso de AWS DMS – 25 de enero de 2021