我一直在寻找CONCAT
SQL Server 2008 R2中的功能。我找到了此功能的链接。但是当我使用此功能时,它会出现以下错误:
消息195,级别15,状态10,第7行
'CONCAT'不是公认的内置函数名称。
CONCAT
SQL Server 2008 R2中是否存在该功能?
如果没有,如何在SQL Server 2008 R2中连接字符串?
CONCAT
是新的 2012年
我一直在寻找CONCAT
SQL Server 2008 R2中的功能。我找到了此功能的链接。但是当我使用此功能时,它会出现以下错误:
消息195,级别15,状态10,第7行
'CONCAT'不是公认的内置函数名称。
CONCAT
SQL Server 2008 R2中是否存在该功能?
如果没有,如何在SQL Server 2008 R2中连接字符串?
CONCAT
是新的 2012年
Answers:
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
函数的实现。
SELECT {fn concat ('foo', 'bar')};
在以前的版本中使用。虽然只接受2个参数。
+
运算符,如@ lynn-langit在她的答案中提到的,起初我完全想念它,因为我只读了可接受的答案...
+
行为不同,其结果为SELECT 'A' + 'B' + 'C'
VS SELECT CONCAT('A', 'B', 'C')
VS SELECT 'A' + 'B' + NULL
VS SELECT CONCAT('A', 'B', NULL)
是ABC
,ABC
,NULL
,AB
NULL
,所以+
效果很好:)
如上所述,SQL Server 2012之前不支持CONCAT。但是,可以按照建议使用+运算符简单地进行连接。但是请注意,如果第一个操作数是数字,则此运算符将引发错误,因为它认为将加法而不是级联。要解决此问题,只需在前面添加“”。例如
someNumber + 'someString' + .... + lastVariableToConcatenate
会引发错误,但效果'' + someNumber + 'someString' + ......
很好。
另外,如果要串联两个数字,请确保在它们之间添加一个“
.... + someNumber + '' + someOtherNumber + .....
SELECT 'varchar(' + 5 + ')'
引发错误“转换为nvarchar值‘VARCHAR(’数据类型为int时转换失败”,所以我想你的答案不成立。
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)
。