Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Относится к: 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;