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

Sql server 如何在SQL Server 2008 R2中使用CONCAT函数?,sql-server,sql-server-2008,tsql,Sql Server,Sql Server 2008,Tsql,我正在SQL Server 2008 R2中寻找一个CONCAT函数。我但当我使用此函数时,它会产生以下错误: 味精195,第15级,第10状态,第7行 “CONCAT”不是可识别的内置函数名 SQL Server 2008 R2中是否存在CONCAT函数 如果没有,如何在SQL Server 2008 R2中连接字符串?CONCAT是SQL Server 2012的新功能。您提供的链接清楚地表明,它不是以前版本(包括2008 R2)上的功能 在文档树中可以看到它是SQL Server 2012

我正在SQL Server 2008 R2中寻找一个
CONCAT
函数。我但当我使用此函数时,它会产生以下错误:

味精195,第15级,第10状态,第7行
“CONCAT”不是可识别的内置函数名

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


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

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)  

EDITMartin Smith很有帮助地指出。

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


看一看示例代码。从SQL 2012开始,您可能希望使用新的。如上所述,CONCAT在SQL Server 2012之前不受支持。但是,您可以按照建议使用+运算符进行连接。但是请注意,如果第一个操作数是数字,则此运算符将抛出错误,因为它认为将进行加法而不是串联。要解决此问题,只需在前面添加“”。比如说

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

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

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

我建议你先把所有的柱子都铸好,然后再铸

cast('data1' as varchar) + cast('data2' as varchar) + cast('data3' as varchar)
这应该对你有用

(city + ', ' + state + ' ' + zip) as ctstzip for select
(city + ', ' + state + ' ' + zip) for insert
仅当任何字段类型与其他字段类型不同时才强制转换或转换

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

i、 e


SQL Server 2012 CONCAT函数的空安全替换近似值

SQL Server 2012:

选择CONCAT(数据1、数据2)

SQL 2012之前的版本(两种解决方案):

选择{fn CONCAT(ISNULL(data1',),ISNULL(data2',)}

选择ISNULL(强制转换(data1为varchar(MAX)),“”)+ISNULL(强制转换(data2为varchar(MAX)),“”)

这两种解决方案对比了其他海报(包括1987年的@Martin Smith、@Svish和@Vasix)提出的一些优秀答案和警告

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

注意:解决方案仅限于2个参数,而
+
运算符
方法可根据需要扩展到多个参数


另请注意@Swifty发现的有关默认
varchar
大小的潜在问题,该问题已通过
varchar(MAX)
纠正。是,该函数不在sql 2008中。您可以使用强制转换操作来执行此操作

例如,我们有
employee
表,您需要
name
applydate

所以你可以用

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

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

您可以使用
选择{fn concat('foo','bar')在以前的版本中。不过只接受2个参数。或者只使用
+
操作符,正如@lynn langit在她的回答中提到的,我一开始完全没有注意到,因为我只阅读了接受的答案…@Svish
+
的行为不同,
的结果选择“A”+“B”+“C”
vs
选择CONCAT('A',B',C')
vs
SELECT'A'+'B'+NULL
vs
SELECT CONCAT'A','B',NULL)
ABC
ABC
NULL
AB
@ta.speot.很高兴知道!虽然在我的例子中没有出现
NULL
,所以
+
效果很好:)如果这个答案包含您必须使用加号的信息,那么它会更有用。社区确认了这一观点-比较@LynnLangit的答案:)OP还问“我如何在SQL Server 2008 R2中连接字符串?”@Oded我只是给出了尝试执行stmt的命令-选择concat('b','a')@marc_s:文档确实有一些迹象表明它适用于SQL Server 2012,但是没有迹象表明CONCAT在2012年是新的。它确实间接地表明它是2012年的,但是页面的UI设计很差。在旧版本中有函数可用的页面上,您正在阅读的文档版本旁边有一个下拉列表。如果你知道这一点,那么你就知道这只适用于2012年。如果您不知道的话,您最终会遇到与Mitesh相同的情况。谢谢,在列列表中使用“+f.columnName+”,效果不错@kuklei在我的SQL server上,
SELECT'varchar('+5+')”
抛出错误“将nvarchar值'varchar('转换为数据类型int时转换失败”,因此我猜您的答案不成立。提示:值得注意的是,如果未指定varchar大小,例如varchar(50),则sql将使用默认值30。如果要转换的变量/值大于默认值,则将截断该变量/值而不会引发错误。
Select   cast(name as varchar) + cast(applydate as varchar) from employee