Como todo el mundo sabe, un valor del tipo Nulo es un campo que no tiene ningún valor. Las sentencias que ejecutamos de manera diaria tendrán que lidiar con valores nulos, especialmente cuando se trata de concatenación de cadenas (añadiendo grupos de cadenas).
Empecemos con la definición de “SQL coalesce”. La función SQL Coalesce retorna a la primera expresión no nula entre sus argumentos. La regla básica aquí es que Anula cualquier cosa que sea igual a cero. Es como cero multiplicado a cualquier cosa es igual a cero. Por ejemplo, el gran problema aquí es cuando se trabaja con cosas como direcciones. Para ser más específicos, es un problema cuando tenemos que combinar, por ejemplo, un nombre de calle con un código postal, una línea de dirección adicional, etc. Entonces, usando la lógica de arriba, si uno de ellos tiene un valor Nulo, todo va a ser Nulo.
Ahora, si usted no está muy familiarizado con la expresión de SQL Coalesce, probablemente lo mejor es familiarizarse primero con la expresión de caso como también de sus formatos, ya que la expresión de SQL Coalesce es un atajo sintáctico para la expresión del caso. Más adelante se explicará esto con un ejemplo simple, pero no dude en consultar el siguiente artículo para poder obtener más detalles sobre la expresión del caso: Consultar datos utilizando la sentencia SQL Case
Si deseamos probar la definición de SQL Coalesce en los términos de líneas arriba, tome en cuenta el siguiente ejemplo que utiliza la base de datos “AdventureWorks2012”:
1 2 3 4 5 6 |
SELECT p.Title, p.FirstName, p.MiddleName, p.FirstName+' '+p.LastName AS FirstLastName, COALESCE(p.FirstName+' '+p.MiddleName+' '+p.LastName, p.FirstName+' '+p.LastName, p.FirstName, p.LastName) AS FullName FROM Person.Person AS p; |
Antes de poder ejecutar esta consulta, demos un vistazo a las columnas del Explorador de Objetos. Tome en cuenta que tanto el “Nombre” como “Apellido” no son nulos, lo que indica que no pueden estar vacíos:
Para poder simplificar el ejemplo, ejecute el siguiente script para permitir nulos en la columna “Apellido”:
1 2 |
ALTER TABLE Person.Person ALTER COLUMN LastName NVARCHAR(50) NULL; GO |
Haga clic con el botón derecho en la tabla “Persona” en el Explorador de objetos y elija el comando Editar las 200 filas principales. Cambie el valor de “Apellido” de “Sánchez” a “Nulo” del primer registro:
Nos aseguramos de que el registro tenga el primer nombre, pero no el apellido. Entonces, ahora si vamos a hacer solo el nombre más el apellido como parte de nuestra consulta inicial, el resultado será nulo:
1 2 3 4 5 |
SELECT p.Title, p.FirstName, p.MiddleName, p.FirstName+' '+p.LastName AS FirstLastName FROM Person.Person AS p; |
Este es el resultado:
Como se mencionó inicialmente, esto es un problema. Pero, si realizamos la consulta con la expresión SQL Server Coalesce, por la definición de Coalesce SQL devolverá el primer valor no nulo:
Como usted puede ver en la consulta, se puede hacer una expresión uno, coma, expresión dos, etc. Básicamente, le estamos diciendo que se agreguen todos juntos utilizando las expresiones de SQL Coalesce:
- Nombre, segundo nombre, apellido – si alguno de ellos es Nulo, vaya al siguiente
- Nombre, apellido – se aplican las mismas reglas mencionadas anteriormente y también a continuación
- Nombre – aquí es donde usamos Coalesce y retornamos el primer valor que no sea Nulo (Ken)
- Apellido – el último no será afectado
Incluso es posible hacer un esfuerzo adicional y decir que si todo lo anterior es Nulo (nombre, segundo nombre, apellido), se proporcione un valor predeterminado que diga “Sin nombre”:
1 2 3 4 5 6 |
SELECT p.Title, p.FirstName, p.MiddleName, p.FirstName+' '+p.LastName AS FirstLastName, COALESCE(p.FirstName+' '+p.MiddleName+' '+p.LastName, p.FirstName+' '+p.LastName, p.FirstName, p.LastName, 'No name') AS FullName FROM Person.Person AS p; |
Y se puede tener algo así como esto, si el nombre, el segundo nombre y el apellido son Nulos:
En resumen, espero que te haya parecido útil lo que puede hacer SQL Coalesce cuando se tiene que combinar muchos campos y cuando algunos de ellos son nulos. Puedes probar con la salida y, básicamente ver cómo se vería si estuvieran todos, cómo se vería si solo un par estuviera allí, y puedes ir hasta el final de la lista para hacer todas las combinaciones posibles, incluyendo el caso donde todos los campos tienen un valor Nulo y asegúrese de que el resultado de salida no sea Nulo utilizando la función de SQL Coalesce.
Además, tome en cuenta que la expresión SQL Server Coalesce y la función IsNull tienen un propósito parecido, pero se comportan de una manera diferente. SQL Coalesce puede usarse en cualquier cosa que pueda devolver un valor Nulo y no solo los caracteres como se muestra en este artículo, sino también el número, etc. La función IsNull tiene solo dos parámetros, en donde SQL Coalesce tiene X parámetros y puede durar hasta donde puedes seguir añadiendo expresiones.
Espero que esto haya sido informativo para usted y que haya aprendido algo sobre la función de Coalesce SQL. Gracias por leer.