¿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
sql
sql-server
sql-server-2008
tsql
Lloyd Banks
fuente
fuente
ISNULL
, no es estándar, menos flexible, leí que siempre devolverá el tipo de datos del primer argumento y no el tipo de datos del valor devuelto como loCOALESCE
hace.No estoy seguro de por qué cree que la documentación es vaga.
Simplemente revisa todos los parámetros uno por uno y devuelve el primero que es
NOT 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 convierten implícitamente en 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-comoISNULL()
no.fuente
ISNULL
embargo, creo que devuelve un valor con el mismo tipo de datos que el primer parámetroexpressions
comparaciones con CASE, comparaciones con ISNULL y, finalmente, a un ejemplo sin resultado. Luego, un ejemplo demasiado complejo con demasiados detalles. Cuando todo lo que necesitamos es esta respuesta con 5-6 líneas de WTF, esto es y lo hace.Así es como veo a COALESCE ... y espero que tenga sentido ...
En una forma simplista….
Coalesce (FieldName, 'Vacío')
Entonces esto se traduce en… Si "FieldName" es NULL, complete el valor del campo con la palabra "EMPTY".
Ahora para múltiples valores ...
Coalesce (FieldName1, FieldName2, Value2, Value3)
Si el valor en Fieldname1 es nulo, rellénelo con el valor en Fieldname2, si FieldName2 es NULL, rellénelo con Value2, etc.
Esta pieza de código de prueba para la base de datos de muestra AdventureWorks2012 funciona perfectamente y ofrece una buena explicación visual de cómo funciona COALESCE :
fuente
Hay mucho más para fusionar que solo un reemplazo para ISNULL. Estoy completamente de acuerdo en que la "documentación" oficial de coalesce es vaga e inútil. Este artículo ayuda mucho. http://www.mssqltips.com/sqlservertip/1521/the-many-uses-of-coalesce-in-sql-server/
fuente
Aquí hay una consulta simple que contiene coalesce:
Devolverá las personas donde tanto addressId como contactId son nulos.
función de unión
p.ej
fuente
La definición más simple de la función Coalesce () podría ser:
Nota: evalúa TODOS los parámetros, es decir, no omite la evaluación de los argumentos en el lado derecho del parámetro devuelto / NOT NULL.
Sintaxis:
Atención : además de los argumentos que se evalúan como NULL, todos los demás argumentos (NOT-NULL) deben ser del mismo tipo de datos o deben ser de tipos coincidentes (que pueden "autoconvertirse implícitamente" en un tipo de datos compatible), consulte los ejemplos abajo:
HTH
fuente
fuente