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


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

Msg 195, Nivel 15, Estado 10, Línea 7
'CONCAT' no es un nombre de función incorporado reconocido.

¿Existe la función CONCAT en SQL Server 2008 R2?

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

Author: George Stocker, 2012-05-11

6 answers

CONCAT es nuevo en SQL Server 2012. El enlace que diste deja esto claro, no es una función en Versiones anteriores, incluyendo 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 función CONCAT de ODBC .

 61
Author: ta.speot.is,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-11 14:48:45

Solo para completar - en SQL 2008 usaría el operador plus + para realizar la concatenación de cadenas.

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

 93
Author: Lynn Langit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-08 21:12:12

Sugiero que echar todas las columnas antes de concat ellos

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

Esto debería funcionar para usted.

 37
Author: vasin1987,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-11 13:08:36

CONCAT, como se ha indicado, no es compatible antes de SQL Server 2012. Sin embargo, puede concatenar simplemente usando el operador + como se sugiere. Pero tenga cuidado, este operador lanzará un error si el primer operando es un número, ya que piensa que se sumará y no concatenar. Para resolver este problema, simplemente agregue " en frente. Por ejemplo

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

Generará un error, PERO '' + someNumber + 'someString' + ...... funcionará bien.

También, si hay dos números para concatenar asegúrese de agregar un " entre ellos, así

.... + someNumber + '' + someOtherNumber + .....
 22
Author: kuklei,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-02 10:02:57

NULL caída segura en las 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 agregan NULL a '' (cadena vacía) casting para un manejo seguro NULL teniendo en cuenta el comportamiento variable del operador + perteneciente a operandos específicos.

Tenga en cuenta que la solución de la función de escalador ODBC está limitada a 2 argumentos,+ 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 tamaño predeterminado varchar aquí solucionado por varchar(MAX).

 3
Author: Troy Sheaffer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-22 18:27:47
(city + ', ' + state + ' ' + zip) as ctstzip for select
(city + ', ' + state + ' ' + zip) for insert

Solo cast o convert si cualquier tipo de campo es diferente de los demás.

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

Es decir,

Insert into testtable (ctstzip) Values ((city + ', ' + state + ' ' + zip))
 2
Author: Antonio Perez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-25 17:51:41