Sql server 如何在SQL Server 2008 R2中使用CONCAT函数?
我正在SQL Server 2008 R2中寻找一个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
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')
vsSELECT'A'+'B'+NULL
vsSELECT 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