Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Относится к: SQL Server 2017 (14.x) и более поздние версии
Azure SQL Database
AzureSQL Managed Instance
AzureSynapse Analytics
SQL analytics endpoint in Microsoft Fabric
Warehouse in Microsoft Fabric
SQLdatabase in Microsoft Fabric
Эта функция возвращает строку, возникающую в результате объединения двух или более строковых значений в сквозной форме. Она разделяет значения в такой объединенной строке с помощью разделителя, указанного в первом аргументе функции. (Название функции CONCAT_WS означает сцепить с разделителем.)
Синтаксис
CONCAT_WS ( separator , argument1 , argument2 [ , argumentN ] ... )
Аргументы
separator
Выражение любого типа символа (char, nchar, nvarchar или varchar).
argument1, argument2 [ , argumentN ]
Выражение любого строкового значения. Функции CONCAT_WS требуется по крайней мере два аргумента и не более 254 аргументов.
Типы возвращаемых данных
Строковое значение, длина и тип которого зависят от входных данных.
Замечания
CONCAT_WS принимает переменное количество строковых аргументов и объединяет их в одну строку. Она разделяет значения в такой объединенной строке с помощью разделителя, указанного в первом аргументе функции.
CONCAT_WS требует аргумента разделителя и не менее двух других аргументов строкового значения; CONCAT_WS в противном случае вызывает ошибку. Функция CONCAT_WS неявно преобразует все аргументы в строковые типы перед объединением.
Неявное преобразование в строки выполняется по существующим правилам преобразования типов данных. Дополнительные сведения о преобразовании типов данных см. в статье CONCAT (Transact-SQL).
Обработка значений NULL
CONCAT_WS игнорирует параметр SET CONCAT_NULL_YIELDS_NULL { ON | OFF }.
При CONCAT_WS получении аргументов со всеми NULL значениями возвращается пустая строка типа varchar(1).
CONCAT_WS игнорирует значения NULL во время объединения и не добавляет разделитель между значениями NULL. Таким образом CONCAT_WS позволяет точно объединить строки, которые могут иметь пустые значения, например второе поле адреса. Дополнительные сведения см . в примере B.
Если сценарий включает значения NULL, разделенные разделителем, рассмотрите функцию ISNULL . Дополнительные сведения см. в примере C.
Примеры
А. Объединение значений с разделителем
В этом примере объединяются три столбца из sys.databases таблицы, разделяя значения дефисом, окруженным пробелами (-).
SELECT CONCAT_WS(' - ', database_id, recovery_model_desc, containment_desc) AS DatabaseInfo
FROM sys.databases;
Вот результирующий набор.
DatabaseInfo
-----------------
1 - SIMPLE - NONE
2 - SIMPLE - NONE
3 - FULL - NONE
4 - SIMPLE - NONE
B. Пропуск значений NULL
Этот пример игнорирует NULL значения в списке аргументов и использует значение разделителя запятых (,).
SELECT CONCAT_WS(',', '1 Microsoft Way', NULL, NULL, 'Redmond', 'WA', 98052) AS Address;
Вот результирующий набор.
Address
--------------------------------
1 Microsoft Way,Redmond,WA,98052
В. Создание данных в формате CSV из таблицы
В этом примере используется значение разделителя запятых (,) и добавляет символ возврата каретки CHAR(13) в формате значений, разделенных запятыми, результирующий набор.
SELECT STRING_AGG(
CONCAT_WS(',', database_id, recovery_model_desc, containment_desc), CHAR(13)
) AS DatabaseInfo
FROM sys.databases;
Вот результирующий набор.
DatabaseInfo
-------------
1,SIMPLE,NONE
2,SIMPLE,NONE
3,FULL,NONE
4,SIMPLE,NONE
CONCAT_WS игнорирует NULL значения в столбцах. Перенесите столбец, допускающий значения NULL, с помощью функции ISNULL и укажите значение по умолчанию. Например:
SELECT STRING_AGG(
CONCAT_WS(',', database_id, ISNULL(recovery_model_desc, ''), ISNULL(containment_desc, 'N/A')), CHAR(13)
) AS DatabaseInfo
FROM sys.databases;