w3schools - sql syntax for concatenate




CONCAT'ing NULL fields (8)

A partir de MS SQL Server 2012 se introdujo la función CONCAT y de acuerdo con MSDN

Los valores nulos se convierten implícitamente en una cadena vacía. Si todos los argumentos son nulos, se devuelve una cadena vacía de tipo varchar (1).

entonces es suficiente usar CONCAT sin IsNull

CONCAT(FirstName, LastName, Email)

Tengo una tabla con tres campos, Nombre, Apellido y Correo electrónico.

Aquí hay algunos datos ficticios:

FirstName | LastName | Email
Adam        West       [email protected]
Joe         Schmoe     NULL

Ahora, si lo hago:

SELECT CONCAT(FirstName, LastName, Email) as Vitals FROM MEMBERS

Vitals for Joe es nulo, ya que hay un solo campo nulo. ¿Cómo superas este comportamiento? Además, ¿es este el comportamiento predeterminado en MS SQL Server?


Después de observar las respuestas a esta pregunta, puede combinarlas en una solución simple

CONCAT_WS(',',
IF(NULLIF(FirstName, '') IS NULL, NULL, FirstName),
IF(NULLIF(LastName, '') IS NULL, NULL, usr_lastname),
IF(NULLIF(Email, '') IS NULL, NULL, Email))

Entonces , en resumen, usamos CONCAT_WS para concatenar nuestros campos y separarlos con; y observe que los campos NULL o EMPTY no se concatenan

NULLIF comprobará si el campo es NULL o EMPTY , un campo que solo contiene espacios o está vacío, por ejemplo: '', '') y la salida será NULL o NOT NULL

SI saldrá el campo si no es NULL o EMPTY


En mysql isnull no funcionará en algún momento. prueba IFNULL (),

CONCAT(IFNULL(FirstName,''),IFNULL(LastName,''),IFNULL(Email,''))

La respuesta de Stefan es correcta. Para sondear un poco más, necesitas saber que NULL no es lo mismo que Nothing. Null representa la ausencia de un valor, o en otras palabras, no está definido. Nada representa una cadena vacía que ES de hecho un valor.

Indefinido + cualquier cosa = indefinido

¡Una buena base de datos para retener!


SQL Server no tiene una función CONCAT .
(Actualización: a partir de MS SQL Server 2012 se introdujo la función CONCAT )

En el comportamiento predeterminado de SQL Server, los NULL se propagan a través de una expresión.

En SQL Server, uno escribiría:

SELECT FirstName + LastName + Email as Vitals FROM MEMBERS

Si necesita manejar NULL s:

SELECT ISNULL(FirstName, '') + ISNULL(LastName, '') + ISNULL(Email, '') as Vitals FROM MEMBERS

Si obtienes (como hago en MySQL):

#1582 - Incorrect parameter count in the call to native function 'ISNULL'

Puede reemplazar la función ISNULL por COALESCE:

CONCAT(COALESCE(FirstName,''),COALESCE(LastName,''),COALESCE(Email,''))

Tratar

ISNULL(FirstName, '<BlankValue>') -- In SQL Server
IFNULL(Firstname, '<BlankValue>') -- In MySQL

Asi que,

CONCAT(ISNULL(FirstName,''),ISNULL(LastName,''),ISNULL(Email,'')) -- In SQL Server
CONCAT(IFNULL(FirstName,''),IFNULL(LastName,''),IFNULL(Email,'')) -- In MySQL

devolvería lo mismo sin el problema nulo (y una cadena en blanco donde deberían ser nulos).


SELECT ISNULL(FirstName,'')+ISNULL(LastName,'')+ISNULL(Email,'') as Vitals FROM MEMBERS

es recomendable, pero si realmente está enganchado con CONCAT, envuélvalo en {fn} y puede usar la función ODBC como:

SELECT {fn CONCAT(ISNULL(FirstName,''), ISNULL(LastName,''), ISNULL(Email,''))} as Vitals FROM MEMBERS

Si necesita primero <espacio> al último pero solo el último cuando el primer valor es nulo, puede hacer esto:

ISNULL(FirstName+' ','') + ISNULL(LastName,'')

Agregué el espacio en firstname que podría ser nulo, eso significaría que el espacio solo sobreviviría si FirstName tuviera un valor.

Para ponerlos todos juntos con un espacio entre cada uno:

RTRIM(ISNULL(Firstname+' ','') + ISNULL(LastName+' ','') + ISNULL(Email,''))




concatenation