example - coalesce sqlserver
Función COALESCE en TSQL (6)
¿Alguien puede explicar cómo funciona la función COALESCE en TSQL? La sintaxis es la siguiente
COALESCE (x, y)
El documento de MSDN sobre esta función es bastante vago
Aquí hay una consulta simple que contiene coalesce -
select * from person where coalesce(addressId, ContactId) is null.
Devolverá las personas donde tanto addressId como contactId son nulas.
función coalescente
- toma al menos dos argumentos.
- los argumentos deben ser de tipo entero.
- devuelve el primer argumento no nulo.
p.ej
- coalesce (null, 1, 2, 3) devolverá 1.
- coalesce (null, null) devolverá null.
Esta es la forma en que veo a COALESCE ... y espero que tenga sentido ...
En una forma simplista ...
Coalesce (FieldName, ''Empty'')
Entonces, esto se traduce en ... Si "FieldName" es NULL, rellene el valor del campo con la palabra "EMPTY".
Ahora para valores mutliple ...
Coalesce (FieldName1, FieldName2, Value2, Value3)
Si el valor en Fieldname1 es nulo, llénelo con el valor en Fieldname2, si FieldName2 es NULL, llénelo con Value2, etc.
Este código de prueba para la base de datos de ejemplo AdventureWorks2012 funciona perfectamente y ofrece una buena explicación visual de cómo funciona COALESCE :
SELECT Name, Class, Color, ProductNumber,
COALESCE(Class, Color, ProductNumber) AS FirstNotNull
FROM Production.Product
Hay mucho más para unir que solo un reemplazo para ISNULL. Estoy totalmente de acuerdo con que la "documentación" oficial de la fusión es vaga e inútil. Este artículo ayuda mucho. http://www.mssqltips.com/sqlservertip/1521/the-many-uses-of-coalesce-in-sql-server/
Me han dicho que COALESCE es menos costoso que ISNULL, pero la investigación no lo indica. ISNULL toma solo dos parámetros, el campo que se evalúa para NULL y el resultado que desea si se evalúa como NULL. COALESCE tomará cualquier cantidad de parámetros y devolverá el primer valor encontrado que no sea NULL.
Hay una descripción mucho más detallada de los detalles aquí http://www.mssqltips.com/sqlservertip/2689/deciding-between-coalesce-and-isnull-in-sql-server/
No estoy seguro de por qué crees que la documentación es vaga.
Simplemente revisa todos los parámetros uno por uno y devuelve el primero que NOT NULL
.
COALESCE(NULL, NULL, NULL, 1, 2, 3)
=> 1
COALESCE(1, 2, 3, 4, 5, NULL)
=> 1
COALESCE(NULL, NULL, NULL, 3, 2, NULL)
=> 3
COALESCE(6, 5, 4, 3, 2, NULL)
=> 6
COALESCE(NULL, NULL, NULL, NULL, NULL, NULL)
=> NULL
Acepta prácticamente cualquier cantidad de parámetros, pero deben ser del mismo tipo de datos. (Si no son del mismo tipo de datos, se emiten implícitamente a un tipo de datos apropiado usando el orden de precedencia del tipo de datos ).
Es como ISNULL()
pero para múltiples parámetros, en lugar de solo dos.
También es ANSI-SQL
, donde-como ISNULL()
no lo es.
Si pasamos las columnas FirstName, MiddleName y LastName como parámetros a la función COALESCE (). La función COALESCE () devuelve el primer valor no nulo de las 3 columnas. Tenga en cuenta que esto ocurre para cada fila en la tabla.
SELECT Id, COALESCE(FirstName, MiddleName, LastName) AS Name
FROM tblEmployee