CONCAT (Transact-SQL)

返回作为串联两个或更多字符串值的结果的字符串。

主题链接图标 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)