如何在SQL Server 2008 R2中使用CONCAT功能?

Mit*_*tti 96 t-sql sql-server sql-server-2008

CONCAT在SQL Server 2008 R2中寻找一个功能.我找到了这个功能的链接.但是当我使用此函数时,它会出现以下错误:

消息195,级别15,状态10,行
7'CONCAT'不是公认的内置函数名称.

CONCAT功能是否存在于SQL Server 2008 R2中?

如果没有,我如何连接SQL Server 2008 R2中的字符串?

Lyn*_*git 101

为了完整性 - 在SQL 2008中,您将使用加号+运算符来执行字符串连接.

使用示例代码查看MSDN参考.从SQL 2012开始,您可能希望使用新的CONCAT功能.


ta.*_*.is 64

CONCAT是SQL Server 2012的新增功能.您提供的链接使其清晰,它不是早期版本的功能,包括2008 R2.

它是SQL Server 2012的一部分,可以在文档树中看到:

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)  
Run Code Online (Sandbox Code Playgroud)

编辑 Martin Smith帮助指出SQL Server提供了ODBC CONCAT功能的实现.

  • 您可以在以前的版本中使用`SELECT {fn concat('foo','bar')};`.仅接受2个参数. (25认同)
  • @Svish` +`行为不同,结果为'SELECT'A'+'B'+'C'`vs`SELECT CONCAT('A','B','C')`vs`SELECT'A'+ 'B'+ NULL` vs`SELECT CONCAT('A','B',NULL)`是'ABC`,`ABC`,`NULL`,`AB` (7认同)
  • 或者只是使用`+`运算符,@ lynn-langit在她的回答中提及,我起初完全错过了因为我只阅读了接受的答案... (6认同)

vas*_*987 41

我建议你在连接它们之前先插入所有列

cast('data1' as varchar) + cast('data2' as varchar) + cast('data3' as varchar)
Run Code Online (Sandbox Code Playgroud)

这应该适合你.

  • 提示:值得注意的是,如果未指定varchar大小,例如varchar(50),则sql将使用默认值30.如果正在转换的变量/值大于默认值,则会截断它而不会引发错误. (5认同)

kuk*_*lei 23

如前所述,在SQL Server 2012之前不支持CONCAT.但是,您可以根据建议使用+运算符连接.但请注意,如果第一个操作数是一个数字,则此运算符将抛出错误,因为它认为将添加而不是连接.要解决此问题,只需在前面添加''.例如

someNumber + 'someString' + .... + lastVariableToConcatenate
Run Code Online (Sandbox Code Playgroud)

会引发错误但是'' + someNumber + 'someString' + ......会工作得很好.

此外,如果要连接两个数字,请确保在它们之间添加"",就像这样

.... + someNumber + '' + someOtherNumber + .....
Run Code Online (Sandbox Code Playgroud)

  • @kuklei在我的SQL服务器上,`SELECT'varchar('+ 5 +')'`抛出错误"转换nvarchar值'转换失败'varchar('到数据类型int",所以我猜你的答案不成立. (2认同)

Tro*_*fer 8

SQL Server 2012 CONCAT 函数的替换近似值中的 NULL 安全下降

SQL Server 2012

SELECT CONCAT(data1, data2)

PRE SQL 2012(两种解决方案)

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

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

这两个解决方案整理了其他发帖者(包括@Martin Smith、@Svish 和@vasin1987)提出的几个优秀答案和警告。

这些选项添加NULL''(空字符串)强制转换以进行安全NULL处理,同时考虑到+与特定操作数有关运算符。

请注意,ODBC Scaler Function解决方案仅限于 2 个参数,而+运算符方法可根据需要扩展为多个参数。

还要注意@Swifty 确定的潜在问题,varchar这里由varchar(MAX).