¿Cómo utilizo la función CONCAT en SQL Server 2008 R2?

102

Estaba buscando una CONCATfunción en SQL Server 2008 R2. Me encontré el enlace para esta función . Pero cuando uso esta función, da el siguiente error:

Msg 195, Level 15, State 10, Line 7
'CONCAT' no es un nombre de función integrado reconocido.

¿Existe la CONCATfunción en SQL Server 2008 R2?

Si no es así, ¿cómo concateno cadenas en SQL Server 2008 R2?

Mitesh Budhabhatti
fuente
@Oded Solo intento ejecutar el stmt - seleccione concat ('b', 'a')
Mitesh Budhabhatti
1
@marc_s: La documentación tiene alguna indicación de que es para SQL Server 2012, pero no hay indicios de que CONCATsea nuevo para 2012.
Gabe
1
Indirectamente indica que es para 2012, pero la página tiene un diseño de interfaz de usuario deficiente. En las páginas donde una función ESTÁ disponible en versiones anteriores, hay un menú desplegable junto a la versión del documento que está leyendo. Si sabe esto, entonces sabrá que es solo para 2012. Si no lo sabías, terminas en la misma situación que Mitesh.
John

Respuestas:

70

CONCATes nuevo en SQL Server 2012. El enlace que proporcionó deja esto en claro, no es una función en versiones anteriores , incluida 2008 R2.

Que es parte de SQL Server 2012 se puede ver en el árbol del documento:

SQL Server 2012  
Product Documentation  
Books Online for SQL Server 2012  
Database Engine  
  Transact-SQL Reference (Database Engine)  
    Built-in Functions (Transact-SQL)  
      String Functions (Transact-SQL)  

EDITAR Martin Smith señala amablemente que SQL Server proporciona una implementación de la CONCATfunción de ODBC .

ta.speot.is
fuente
26
Puede utilizar SELECT {fn concat ('foo', 'bar')};en versiones anteriores. Sin embargo, solo acepta 2 parámetros.
Martin Smith
6
O simplemente use el +operador, como @ lynn-langit menciona en su respuesta, que al principio me perdí por completo porque solo leí la respuesta aceptada ...
Svish
7
@Svish +se comporta de manera diferente, los resultados para SELECT 'A' + 'B' + 'C'vs SELECT CONCAT('A', 'B', 'C')vs SELECT 'A' + 'B' + NULLvs SELECT CONCAT('A', 'B', NULL)son ABC, ABC, NULL,AB
ta.speot.is
@ ta.speot.is ¡Es bueno saberlo! Aunque en mi caso no hubo casos de NULL, así que +funcionó muy bien :)
Svish
Esta respuesta sería mucho más útil si contuviera la información de que debe usar el signo más en su lugar. La comunidad confirma esa opinión: compare los votos a favor de la respuesta de @ LynnLangit :) El OP también preguntó "¿cómo concateno cadenas en SQL Server 2008 R2?"
Honza Zidek
101

Solo para completar: en SQL 2008, usaría el +operador más para realizar la concatenación de cadenas.

Eche un vistazo a la referencia de MSDN con código de muestra. A partir de SQL 2012, es posible que desee utilizar la nueva función CONCAT .

Lynn Langit
fuente
46

Te sugiero que eches todas las columnas antes de encajarlas.

cast('data1' as varchar) + cast('data2' as varchar) + cast('data3' as varchar)

Esto debería funcionar para ti.

vasin1987
fuente
6
SUGERENCIA: Vale la pena señalar que si no se especifica un tamaño varchar, por ejemplo varchar (50), entonces sql usará el valor predeterminado de 30. Si la variable / valor que se está emitiendo es mayor que el predeterminado, se truncará sin generar un error.
Swifty
23

CONCAT, como se indicó, no es compatible antes de SQL Server 2012. Sin embargo, puede concatenar simplemente usando el operador + como se sugiere. Pero cuidado, este operador arrojará un error si el primer operando es un número, ya que cree que estará sumando y no concatenando. Para resolver este problema, simplemente agregue "" al frente. Por ejemplo

someNumber + 'someString' + .... + lastVariableToConcatenate

generará un error PERO '' + someNumber + 'someString' + ......funcionará bien.

Además, si hay dos números para concatenar, asegúrese de agregar un '' entre ellos, así

.... + someNumber + '' + someOtherNumber + .....
kuklei
fuente
¡Gracias, usar '' + f.columnName + '' dentro de la lista de columnas funciona de maravilla!
Lucas
2
@kuklei En mi servidor SQL, SELECT 'varchar(' + 5 + ')'arroja el error "La conversión falló al convertir el valor nvarchar 'varchar (' al tipo de datos int", así que supongo que su respuesta no es válida.
Alexander
5

Caída segura NULL en aproximaciones de reemplazo para la función CONCAT de SQL Server 2012

SQL Server 2012 :

SELECT CONCAT(data1, data2)

PRE SQL 2012 (dos soluciones) :

SELECT {fn CONCAT(ISNULL(data1, ''), ISNULL(data2, ''))}

SELECT ISNULL(CAST(data1 AS varchar(MAX)), '') + ISNULL(CAST(data2 AS varchar(MAX)), '')

Estas dos soluciones recopilan varias respuestas excelentes y advertencias planteadas por otros carteles, incluidos @Martin Smith, @Svish y @ vasin1987.

Estas opciones se suman NULLa la ''conversión (cadena vacía) para un NULLmanejo seguro al tiempo que tienen en cuenta el comportamiento variable del +operador en relación con operandos específicos.

Tenga en cuenta que la solución ODBC Scaler Function está limitada a 2 argumentos, mientras que el enfoque del +operador es escalable a muchos argumentos según sea necesario.

Tenga en cuenta también el problema potencial identificado por @Swifty con respecto al varchartamaño predeterminado resuelto aquí por varchar(MAX).

Troy Sheaffer
fuente
3
(city + ', ' + state + ' ' + zip) as ctstzip for select
(city + ', ' + state + ' ' + zip) for insert

Solo transmite o convierte si algún tipo de campo es diferente de los demás.

Al insertar, el valor debe estar en el lugar correcto, es necesario insertarlo. Usar "como" le dará un error.

es decir

Insert into testtable (ctstzip) Values ((city + ', ' + state + ' ' + zip))
Antonio Pérez
fuente
2

Sí, la función no está en sql 2008. Puede usar la operación de conversión para hacer eso.

Por ejemplo tenemos employeemesa y quieres namecon applydate.

para que puedas usar

Select   cast(name as varchar) + cast(applydate as varchar) from employee

Funcionará donde la función concat no esté funcionando.

M Faisal SE
fuente