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

时间:2012-05-11 11:17:12

标签: sql-server sql-server-2008 tsql

我在SQL Server 2008 R2中寻找CONCAT函数。我found the link for this function。但是当我使用这个函数时,会出现以下错误:

  

Msg 195,Level 15,State 10,Line 7
  'CONCAT'不是公认的内置函数名称。

SQL Server 2008 R2中是否存在CONCAT函数?

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

8 个答案:

答案 0 :(得分:97)

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

使用示例代码查看MSDN reference。从SQL 2012开始,您可能希望使用新的CONCAT function

答案 1 :(得分:62)

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)  

编辑 Martin Smith帮助指出SQL Server provides an implementation of ODBC's CONCAT function

答案 2 :(得分:39)

我建议你在连接之前投射所有列

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

这应该适合你。

答案 3 :(得分:23)

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

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

会引发错误但是'' + someNumber + 'someString' + ......会正常工作。

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

.... + someNumber + '' + someOtherNumber + .....

答案 4 :(得分:4)

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处理,同时考虑与特定操作数相关的+运算符的变化行为。< / p>

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

另请注意@Swifty在varchar补救的默认varchar(MAX)尺寸中发现的潜在问题。

答案 5 :(得分:3)

(city + ', ' + state + ' ' + zip) as ctstzip for select
(city + ', ' + state + ' ' + zip) for insert

如果任何字段类型与其他字段类型不同,则仅进行转换或转换。

在插入时,值必须位于您需要插入的正确位置。使用“as”会给你一个错误。

Insert into testtable (ctstzip) Values ((city + ', ' + state + ' ' + zip))

答案 6 :(得分:0)

是的,该功能不在sql 2008中。您可以使用强制转换操作来做到这一点。

例如,我们有employee表,而您想将nameapplydate一起使用。

因此您可以使用

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

它将在concat功能不起作用的地方工作。

答案 7 :(得分:0)

您可以在要连接的字符串之间使用“+”

SELECT string1 + string2

如果其中之一给出转换错误,例如其中一列是 int 列,您应该在连接列之前进行转换,如

SELECT (CONVERT(nvarchar, intColumn) + string2