如何在SQL Server 2008 R2中使用CONCAT函数?


102

我一直在寻找CONCATSQL Server 2008 R2中的功能。我找到了此功能的链接。但是当我使用此功能时,它会出现以下错误:

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

CONCATSQL Server 2008 R2中是否存在该功能?

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


@Oded我只是尝试执行stmt-选择concat('b','a')
Mitesh Budhabhatti 2012年

1
@marc_s:文档也有一些迹象表明,它是SQL Server 2012中,但没有迹象表明CONCAT新的 2012年
加布

1
它确实间接表明它适用于2012,但是页面的UI设计不佳。在较早版本中提供功能的页面上,您正在阅读的文档版本旁边会直接出现一个下拉列表。如果您知道这一点,那么您就知道它仅适用于2012年。如果您不知道,您将面临与Mitesh相同的情况。
约翰

Answers:


70

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提供了ODBC CONCAT函数的实现


26
您可以SELECT {fn concat ('foo', 'bar')};在以前的版本中使用。虽然只接受2个参数。
马丁·史密斯

6
或只使用+运算符,如@ lynn-langit在她的答案中提到的,起初我完全想念它,因为我只读了可接受的答案...
Svish 2015年

7
@Svish +行为不同,其结果为SELECT 'A' + 'B' + 'C'VS SELECT CONCAT('A', 'B', 'C')VS SELECT 'A' + 'B' + NULLVS SELECT CONCAT('A', 'B', NULL)ABCABCNULLAB
ta.speot.is

@ ta.speot.is很高兴知道!尽管就我而言,没有案例NULL,所以+效果很好:)
Svish 2015年

如果它包含您必须使用加号代替的信息,则此答案将更加有用。社区确认了这一观点-比较@LynnLangit的回答:) OP 问“如何在SQL Server 2008 R2中连接字符串?”
Honza Zidek


46

我建议您在连接它们之前先投射所有列

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

这应该为您工作。


6
提示:值得注意的是,如果未指定varchar大小,例如varchar(50),则sql将使用默认值30。如果要转换的变量/值大于默认值,则将其截断而不会引发错误。
Swifty

23

如上所述,SQL Server 2012之前不支持CONCAT。但是,可以按照建议使用+运算符简单地进行连接。但是请注意,如果第一个操作数是数字,则此运算符将引发错误,因为它认为将加法而不是级联。要解决此问题,只需在前面添加“”。例如

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

会引发错误,但效果'' + someNumber + 'someString' + ......很好。

另外,如果要串联两个数字,请确保在它们之间添加一个“

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

谢谢,在列列表中使用''+ f.columnName +''可以解决问题!
路加福音

2
@kuklei在我的SQL Server,SELECT 'varchar(' + 5 + ')'引发错误“转换为nvarchar值‘VARCHAR(’数据类型为int时转换失败”,所以我想你的答案不成立。
亚历山大

5

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)


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

仅当任何字段类型与其他字段类型不同时才进行转换或转换。

在插入值时,需要将其插入正确的位置。使用“ as”将给您一个错误。

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

2

是的,该函数不在sql 2008中。您可以使用强制转换操作来执行此操作。

例如,我们有employee桌子,你想nameapplydate

所以你可以使用

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

在concat功能不起作用的地方可以使用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.