sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo concatenar cadenas y valores NULL en SQL Server

Problema:

Le gustaría concatenar valores NULL con valores de cadena de una columna diferente en SQL Server.

Ejemplo:

Nuestra base de datos tiene una tabla llamada children con datos en las siguientes columnas:id (clave principal), first_name , segundo_nombre y apellido .

id nombre segundo_nombre apellido
1 Linda NULO Jackson
2 María Alicia Thomson
3 NULO Esteban NULO
4 NULO NULO Marrón

Queremos mostrar el primer nombre de una columna, el segundo nombre de la siguiente columna y el apellido de la última columna como una cadena, incluso si una de las columnas almacena un NULL.

Solución 2:

Usaremos el CONCAT() función. Esta es la consulta que escribirías:

SELECT 
  CONCAT(first_name,  middle_name, last_name) AS name
FROM children;

Aquí está el resultado:

nombre
LindaJackson
MaryAliceThomson
Esteban
Marrón

Discusión:

Usa el CONCAT() función para concatenar valores de cadena de expresiones o columnas que contienen un NULL. Esta función toma una lista de cadenas (o NULL) y muestra todos estos valores en una cadena. No hay separador entre los valores, por lo que es posible que los resultados (como en nuestro ejemplo) no tengan el formato esperado. ¿Cómo podemos corregir esto? Mira otro CONCAT() consulta:

Solución 2:

Aquí hay otra opción de consulta:

SELECT 
  CONCAT(first_name,' ' , middle_name, ' ',last_name) AS name
FROM children;

Aquí está el resultado:

nombre
Linda Jackson
María Alice Thomson
Steven
Marrón

Ahora, aparte de los valores de cadena, esta función también ocupa algunos espacios (colocados entre los valores concatenados). Esto separa una parte del nombre de otra. Pero como vemos, esta solución tampoco es ideal; los nombres completos sin segundo nombre tienen un espacio adicional, mientras que los registros con un solo nombre tienen dos espacios adicionales.

En este caso, el CONCAT_WS() la función es la mejor solución.

Solución 3:

El CONCAT_WS() La función toma un primer argumento adicional:un carácter que sirve como separador entre cadenas. Aquí está la consulta:

SELECT 
  CONCAT_WS(' ' , first_name, middle_name, last_name) AS name
FROM children;

Y el resultado:

nombre
Linda Jackson
María Alice Thomson
Esteban
Marrón

Esta consulta muestra los nombres completos de los niños, sin espacios innecesarios.