Articles

Cómo utilizar la lógica IF…THEN en SQL Server

Posted on

SQL Server tiene la capacidad única de permitirle ejecutar lógica programática en tiempo real sobre los valores dentro de su consulta. Basándose en esas evaluaciones lógicas, puede generar varios valores como parte del conjunto de datos devueltos.

Utilizando la sentencia CASE

Esto se consigue más fácilmente en todas las versiones de SQL Server utilizando la sentencia CASE, que actúa como una expresión lógica IF...THEN...ELSE y devuelve varios valores dependiendo del resultado.

En este ejemplo de abajo, queremos devolver una columna adicional locale que especifica si nuestro libro tiene lugar en la Tierra Media o en la vieja Tierra normal.

SELECT CASE WHEN books.title = 'The Hobbit' THEN 'Middle-earth' WHEN books.primary_author = 'Tolkien' THEN 'Middle-earth' ELSE 'Earth' END AS locale, books.*FROM books

Antes de examinar el aspecto especial CASE de esta declaración, vamos a eliminar temporalmente el CASE para notar que se trata de una declaración SELECT extremadamente simple en la superficie:

SELECT books.*FROM books

Por lo tanto, vamos a examinar cómo está estructurada la sección CASE y qué comportamiento lógico estamos realizando.

CASE WHEN books.title = 'The Hobbit' THEN 'Middle-earth' WHEN books.primary_author = 'Tolkien' THEN 'Middle-earth' ELSE 'Earth'END AS locale

Para empezar, inicializamos la sentencia CASE y luego especificamos bajo qué condiciones (WHEN) nuestra sentencia CASE debe evaluar un resultado. En este ejemplo, estamos examinando los campos books.title y books.primary_author; si alguno de ellos se ajusta a nuestro tema tolkieniano, THEN devolvemos el valor ‘Tierra Media’. Si ninguno de los dos campos coincide con nuestra búsqueda, en su lugar devolvemos el valor de ‘Tierra.’

Para reorganizar la lógica como una declaración psuedo-código IF...THEN...ELSE, simplemente estamos pidiendo a SQL que evalúe:

IF title == 'The Hobbit' OR primary_author == 'Tolkien'THEN RETURN 'Middle-earth'ELSE RETURN 'Earth'END

Por último, es fundamental recordar que una sentencia CASE siempre debe ser anexada al final con una sentencia END que coincida. En el ejemplo anterior, también estamos cambiando el nombre del valor resultante que se devuelve a locale, aunque eso es ciertamente opcional.

Usando la función IIF

Si estás usando una versión más moderna de SQL, es útil saber que SQL Server 2012 introdujo la muy útil función IIFIIF es un método abreviado para realizar una sentencia IF...ELSECASE y devolver uno de los dos valores, dependiendo de la evaluación del resultado.

Reestructurar nuestro ejemplo anterior para utilizar IIF es bastante sencillo.

SELECT IIF( books.title = 'The Hobbit' OR books.primary_author = 'Tolkien', 'Middle-earth', 'Earth') AS locale, books.*FROM books

Con una función IIF, sustituimos en gran parte el azúcar sintáctico de la sentencia CASE por unos simples separadores de comas para diferenciar nuestros argumentos.

En general, tanto CASE como IIF hacen el mismo trabajo, pero si se puede elegir, IIF será mucho más sencillo de usar.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *