2011-12-16 29 views
9

Estoy escribiendo una aplicación de PHP y MySQL en la que tengo que concatenar múltiples valores de columna en una sola columna. Hubiera utilizado la función concat(), pero no lo hace manejar valores nulos, y el concat_ws(), que no devuelve el resultado en la salida que quiero. Lo que necesito que puede lograrse en la base de datos de Oracle como esto:Valores de Concat en MySQL Query (para manejar valores nulos)

Select 'The Surname Is'||last_name from employees; 

Mi problema es cómo puedo conseguir este mismo resultado con MySQL..without utilizando las funciones arriba mencionadas?

Respuesta

24

CONCAT con IFNULL:

SELECT 
    CONCAT('The Surname Is ', IFNULL(last_name, 'sadly not available')) 
FROM `employees` 
2

Uso coalesce a concat una cadena vacía

select concat(coalesce(null, '')); 
10

También puede utilizar la función CONCAT_WS que se encarga de valores nulos

SELECT 
CONCAT_WS(' ','The Surname Is',lastname) 
FROM `employees` 
6

@Minesh : CONCAT_WS no 'cuida' de los valores NULL. Para ilustrar este ...

CONCAT_WS("~",house.name,house.address,house.type) 

En el ejemplo anterior, si house.address es NULL el resultado devuelto no contiene un doble tilda puro (~~) como se esperaba. Será una lista separada por tilda con solo 1 tilda. por ejemplo, "Fun House ~ mansión"

+1

sí retirarlo junto con su separador, donde es el problema en eso? es la solución perfecta a menos que quisiera hacer algo más – CME64

+1

Lo considero malo porque la función realiza 2 tareas diferentes, la segunda de las cuales no es sugerida por el nombre de la función. Primero se concatena, genial, gracias, eso es lo que quería. Luego elimina los elementos de la lista de cadenas en blanco, woah, no te pedí que hicieras eso. La función debería llamarse CONCAT_NN_WS() donde NN significa "No nulos". Si le pido a mi software que concatene 5 elementos en una lista, espero una lista de 5 elementos. Entonces no espero que el software diga "Ah, por cierto, vacié los contenedores, alimenté al gato y llamé a tu mamá para invitarla a pasar el fin de semana" –

+0

Tienes razón, será útil y debería tener implementado (manteniendo este método también para otros fines). – CME64

0

Un pequeño truco: Uso cadena vacía como separador con CONCAT_WS (Algunas veces que wa no insertar espacios en blanco)

CONCAT_WS('','The Surname Is:',lastname) 
FROM `employees` 
Cuestiones relacionadas