Поделиться через


CONCAT (Transact-SQL)

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure конечной точке аналитики платформы Аналитики Azure Synapse Analytics (PDW) в Microsoft Fabric Хранилище в Microsoft Fabric

Эта функция возвращает строку, возникающую в результате объединения двух или более строковых значений в сквозной форме.

Примечание.

Чтобы добавить разделяющее значение во время объединения, используйте CONCAT_WS.

Соглашения о синтаксисе Transact-SQL

Синтаксис

CONCAT ( argument1 , argument2 [ , argumentN ] ... )

Аргументы

argument1, argument2 [ , argumentN ]

Выражение любого строкового значения. Функции CONCAT требуется по крайней мере два аргумента и не более 254 аргументов.

Типы возвращаемых данных

Строковое значение, длина и тип которого зависят от входных данных.

Замечания

CONCAT принимает переменное количество строковых аргументов и объединяет их в одну строку. Для этого требуется не менее двух входных значений; CONCAT в противном случае вызывает ошибку. Функция CONCAT неявно преобразует все аргументы в строковые типы перед объединением. CONCAT неявно преобразует значения NULL в пустые строки. При CONCAT получении аргументов со всеми NULL значениями возвращается пустая строка типа varchar(1). Неявное преобразование в строки выполняется по существующим правилам преобразования типов данных. Дополнительные сведения о преобразовании типов данных см. в статье Функции CAST и CONVERT (Transact-SQL).

Тип возвращаемого значения зависит от типа аргументов. Описанные выше основные понятия проиллюстрированы в этой таблице.

Тип Ввода Выходной тип и длина
1. Любой аргумент типа системы SQL-CLR, UDT SQL-CLR или nvarchar(max) nvarchar(max)
2. В противном случае любой аргумент типа varbinary(max) или varchar(max) varchar(max), если только один из параметров не представляет собой значение nvarchar любой длины. В этом случае CONCAT возвращает результат типа nvarchar(max).
3. В противном случае любой аргумент типа nvarchar до 4000 символов (nvarchar(<= 4000)) nvarchar(<= 4000)
4. Во всех остальных случаях любой аргумент типа varchar до 8000 символов (varchar(<= 8000)), если один из параметров не является nvarchar любой длины. В этом случае CONCAT возвращает результат типа nvarchar(max).

Когда CONCAT получает входные аргументы nvarchar длиной <= 4000 символов или входные аргументы varchar длиной <= 8000 символов, неявное преобразование может повлиять на длину результата. Другие типы данных имеют разные длины, когда они неявно преобразуются в строки. Например, int со значением 14 имеет строку длиной 2, а плавающая со значением 1234.56789 имеет строку длиной 7 (1234.57). Таким образом, объединение этих двух значений возвращает результат с длиной не менее 9 символов.

Если ни один из входных аргументов не имеет поддерживаемого типа большого объекта (LOB), возвращаемый тип усечен до 8000 символов длиной, независимо от типа возвращаемого значения. Это усечение позволяет сохранить пространство и обеспечить эффективность формирования плана.

CONCAT можно удаленно выполнять на связанном сервере под управлением SQL Server 2012 (11.x) и более поздних версий. Для старых связанных серверов операция будет выполняться локально, CONCAT после того как связанный сервер возвращает несоединяемые значения.

Примеры

А. Использование CONCAT

SELECT CONCAT ('Happy ', 'Birthday ', 11, '/', '25') AS Result;

Вот результирующий набор.

Result
--------------------
Happy Birthday 11/25

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