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
C. Создание данных в формате 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;