CONCAT (Transact-SQL)
返回作为串联两个或更多字符串值的结果的字符串。
语法
CONCAT ( string_value1, string_value2 [, string_valueN ] )
参数
- string_value
要与其他值串联的字符串值。
返回类型
字符串,其长度和类型取决于输入。
注释
CONCAT 采用可变数量的字符串参数,并将它们串联成单个字符串。 它需要至少两个输入值;否则将引发错误。 所有参数都隐式转换为字符串类型,然后串联在一起。 Null 值被隐式转换为空字符串。 如果所有参数都为 Null,则返回 varchar(1) 类型的空字符串。 隐式转换为字符串的过程遵循现有的数据类型转换规则。 有关数据类型转换的详细信息,请参阅 CAST 和 CONVERT (Transact-SQL)。
返回类型取决于参数的类型。 下表将说明这一映射。
输入类型 |
输出类型和长度 |
---|---|
如果任何参数为 SQL-CLR 系统类型、SQL-CLR UDT 或 nvarchar(max) |
nvarchar(max) |
否则,如果任何参数为 varbinary(max) 或 varchar(max) |
varchar(max),除非一个参数是任意长度的 nvarchar。 如果是这样,则结果为 nvarchar(max)。 |
否则,如果任何参数为 nvarchar(<= 4000) |
nvarchar(<= 4000) |
否则,在所有其他情况下 |
varchar(<= 8000),除非一个参数是任意长度的 nvarchar。 如果是这样,则结果为 nvarchar(max)。 |
当参数 <= 4000(对于 nvarchar)或 <= 8000(对于 varchar)时,隐式转换可能会影响结果的长度。 当将其他数据类型隐式转换为字符串时,它们具有不同长度。 例如,int (14) 的字符串长度为 12,而 float 的长度为 32。 这样,串联两个整数后,结果的长度不小于 24。
如果没有任何输入参数属于支持的大型对象 (LOB) 类型,则返回类型的长度截断为 8000,而不考虑返回类型。 这种截断可节约空间并支持提高计划生成的效率。
此函数可以在 SQL Server 2012 服务器以及更高版本上远程执行。 但在 SQL Server 2012 之下的服务器版本中无法远程执行。
示例
A.使用 CONCAT
SELECT CONCAT ( 'Happy ', 'Birthday ', 11, '/', '25' ) AS Result;
下面是结果集:
Result
-------------------------
Happy Birthday 11/25
(1 row(s) affected)
B.使用 CONCAT 以及 NULL 值
CREATE TABLE #temp (
emp_name nvarchar(200) NOT NULL,
emp_middlename nvarchar(200) NULL,
emp_lastname nvarchar(200) NOT NULL
);
INSERT INTO #temp VALUES( 'Name', NULL, 'Lastname' );
SELECT CONCAT( emp_name, emp_middlename, emp_lastname ) AS Result
FROM #temp;
下面是结果集:
Result
------------------
NameLastname
(1 row(s) affected)