我一直在寻找一个CONCAT
在SQL Server 2008 R2的功能。 我找到了链接这个功能 。 但是,当我使用这个功能,它提供了以下错误:
消息195,级别15,状态10,第7行
“CONCAT”是无法识别的内置函数名称。
是否CONCAT
在SQL Server 2008 R2的功能存在?
如果没有,我怎么串联在SQL Server 2008 R2中的字符串?
我一直在寻找一个CONCAT
在SQL Server 2008 R2的功能。 我找到了链接这个功能 。 但是,当我使用这个功能,它提供了以下错误:
消息195,级别15,状态10,第7行
“CONCAT”是无法识别的内置函数名称。
是否CONCAT
在SQL Server 2008 R2的功能存在?
如果没有,我怎么串联在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)
编辑马丁·史密斯帮忙,指出SQL Server提供ODBC的的实现CONCAT
功能 。
只是为了完整性- 2008年的SQL,你会使用加号+
操作员执行字符串连接。
看一看在MSDN参考示例代码。 与SQL 2012开始,您不妨使用新CONCAT功能 。
我建议你投中的所有列,你Concat的面前
cast('data1' as varchar) + cast('data2' as varchar) + cast('data3' as varchar)
这应该为你工作。
CONCAT,如前所述,是不是之前的SQL Server 2012的支持使用+运算符的建议不过您可以连接简单。 但要注意,如果第一个操作数是因为它认为将增加而不是串联的数字。这操作将抛出一个错误。 要解决此问题,只需在前面加“”。 例如
someNumber + 'someString' + .... + lastVariableToConcatenate
将引发一个错误,但'' + someNumber + 'someString' + ......
会工作得很好。
另外,如果有要连接的两个号码请务必添加'他们之间,像这样
.... + someNumber + '' + someOtherNumber + .....
在更换近似NULL安全下降为SQL Server 2012 CONCAT功能
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)), '')
这两种解决方案整理一些优秀的答案,并通过其他的海报,包括@马丁·史密斯,@Svish和@ vasin1987提出警告。
这些选项添加NULL
来''
(空字符串)铸造安全NULL
处理,而占的不同行为+
关于具体的操作数操作。
注意ODBC定标器功能的解决方案是限制在2个参数,而+
运营商的做法是扩展到许多参数需要。
还要注意关于违约@Swifty确定的潜在问题varchar
通过这里补救大小varchar(MAX)
(city + ', ' + state + ' ' + zip) as ctstzip for select
(city + ', ' + state + ' ' + zip) for insert
只有投或转换,如果任何字段类型是与其他人不同。
在插入值需要在你需要它插入正确的位置。 使用“为”会给你一个错误。
即
Insert into testtable (ctstzip) Values ((city + ', ' + state + ' ' + zip))