CONCAT_WS (Transact-SQL)
Область применения: SQL Server 2017 (14.x) и более поздних
версий База данных SQL Azure Управляемый экземпляр SQL Azure
конечной точке аналитики SQL Azure Synapse Analytics
в хранилище Microsoft Fabric
в 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;