2011-06-21 12 views
39

utilizo el siguiente código SQL para concatenar varias columnas de base de datos de una tabla a una columna del conjunto de resultados:concatenar dos columnas de base de datos en la columna uno de resultados

SELECT (field1 + '' + field2 + '' + field3) FROM table1

Cuando uno de los campos es nulo llegué resultado nulo para toda la expresión de concatenación. ¿Cómo puedo superar esto?

La base de datos es MS SQL Server 2008. Por cierto, ¿es esta la mejor forma de concatenar columnas de bases de datos? ¿Hay algún SQL estándar haciendo esto?

Respuesta

42

El SQL forma estándar de hacer esto sería:

SELECT COALESCE(field1, '') || COALESCE(field2, '') || COALESCE(field3, '') FROM table1 

Ejemplo:

INSERT INTO table1 VALUES ('hello', null, 'world'); 
SELECT COALESCE(field1, '') || COALESCE(field2, '') || COALESCE(field3, '') FROM table1; 

helloworld 
+5

@Steve ¿Qué pasa con la doble pipa? ¿No debería ser eso solo para SQL Server? – rsbarro

+0

Eso es para oráculo –

+0

'||' es el operador de concatenación de cadenas estándar SQL. La pregunta "¿Hay algún SQL estándar haciendo esto?" y estaba respondiendo esa pregunta. Quizás OP quería preguntar "¿Hay alguna forma simple de SQL para hacer esto?" –

4

Use ISNULL para superarlo.

Ejemplo:

SELECT (ISNULL(field1, '') + '' + ISNULL(field2, '')+ '' + ISNULL(field3, '')) FROM table1 

Esto entonces reemplazar su contenido NULL con una cadena vacía que preservará la operación de concatenación de la evaluación como un resultado global NULL.

4

Si tiene un problema con los valores NULL, use la función COALESCE para reemplazar el NULL con el valor de su elección. Su consulta tendría el siguiente aspecto:

SELECT (COALESCE(field1, '') + '' + COALESCE(field2, '') + '' + COALESCE(field3,'')) FROM table1 

http://www.codeproject.com/KB/database/DataCrunching.aspx

+0

1 por mencionar 'COALESCE' –

14

El comportamiento normal con NULL es que cualquier operación que incluye un NULL produce un NULL ...

- 9 * NULL = NULL 
- NULL + '' = NULL 
- etc 

Para superar este uso o ISNULL COALESCE para reemplazar cualquier instancia de NULL con otra cosa ..

SELECT (ISNULL(field1,'') + '' + ISNULL(field2,'') + '' + ISNULL(field3,'')) FROM table1 
+3

1 para la explicación didáctica sobre las operaciones NULL –

+0

Gracias a marc_s, mi editor de copias;) – MatBailie

+2

Estás siendo egoísta: marc_s es * editor de copiado de todos * –

30

Si estaba utilizando SQL 2012 o superior se puede utilizar la función CONCAT:

SELECT CONCAT(field1, field2, field3) FROM table1 

NULL los campos no romperán tu concatenación.

@bummi - Gracias por el comentario - edité mi respuesta para que corresponda.

+2

la pregunta es sobre SQLServer 2008 CONCAT se introdujo con SQLServer 2012 – bummi

+0

Esta respuesta funcionó bien para MySQL. – Peter

1

Si tanto la columna son numéricos A continuación, utilizar el código

Just Cast Column As Varchar(Size)

Ejemplo:

Select (Cast(Col1 as Varchar(20)) + '-' + Cast(Col2 as Varchar(20))) As Col3 from Table 
1

Columna Sólo convierte como VARCHAR (tamaño)

Si tanto la columna son numéricos a continuación, utilizar código a continuación.

Ejemplo:

Select (Cast(Col1 as Varchar(20)) + '-' + Cast(Col2 as Varchar(20))) As Col3 from Table 

¿Cuál será el tamaño de col3 será 40 o algo más

Cuestiones relacionadas