How do I use the CONCAT function in SQL Server 2008 R2?

我在 SQLServer2008R2中寻找一个 CONCAT函数。I 找到了这个函数的链接.但是当我使用这个函数时,它会出现以下错误:

味精19515层10号州际公路7号线
'CONCAT' is not a recognized built-in function name.

SQLServer2008R2中是否存在 CONCAT函数?

如果没有,如何在 SQLServer2008R2中连接字符串?

308057 次浏览

CONCAT是 SQLServer2012的新用户。你给出的链接说明了这一点,它不是 Previous Versions上的一个函数,包括2008R2。

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

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)

EDIT Martin Smith helpfully points out that SQL Server provides an implementation of ODBC's CONCAT function.

仅仅为了完整性-在 SQL2008中,您将使用加 +操作符来执行字符串串联。

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

如前所述,在 SQLServer2012之前不支持 CONCAT。然而,您可以按照建议使用 + 操作符进行连接。但是要注意,如果第一个操作数是一个数字,那么这个操作符将抛出一个错误,因为它认为将要添加而不是连接。要解决这个问题,只需在前面加上“。比如说

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

将引发一个错误,但 '' + someNumber + 'someString' + ......将工作正常。

另外,如果有两个数字需要连接,请确保在它们之间添加一个“ ,如下所示

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

我建议你在连接所有栏目之前先进行铸造

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

This should work for you.

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

只有在任何字段类型与其他字段类型不同时才进行强制转换或转换。

在插入值需要在正确的地方,你需要它被插入。使用“ as”将导致错误。

也就是说。

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

SQLServer2012CONCAT 函数替换近似值中的 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处理,同时考虑到与特定操作数相关的 +操作符的不同行为。

Note the 定标器函数 solution is limited to 2 arguments whereas the +接线员 approach is scalable to many arguments as needed.

Note also the potential issue identified by @Swifty regarding the default varchar size here remedied by varchar(MAX).

是的,该函数不在 sql2008中。您可以使用强制转换操作来实现这一点。

例如,我们有 employee表,你想 nameapplydate

so you can use

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

它将在 concat 函数不工作的地方工作。

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

SELECT string1 + string2

如果其中一个列出现转换错误,比如其中一个列是 int 列,那么在连接这些列之前应该对其进行强制转换,比如

SELECT (CONVERT(nvarchar, intColumn) + string2