+ (объединение строк) (Transact-SQL)
Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure конечной точке аналитики платформы Аналитики Azure Synapse Analytics (PDW) в Microsoft Fabric Хранилище в Microsoft Fabric
Оператор в строковом выражении, объединяющий две или более символьных или двоичных строки, два или более столбцов или несколько строк и имен столбцов в одно выражение (строковый оператор). Например, SELECT 'book'+'case';
возвращает bookcase
.
Соглашения о синтаксисе Transact-SQL
Синтаксис
expression + expression
Аргументы
выражение
Любое допустимое выражение любого из типов данных в категории символьного и двоичного типа данных, за исключением изображений, ntext или текстовых типов данных. Оба выражения должны иметь одинаковый тип данных, или одно из выражений должно допускать неявное преобразование к типу данных другого выражения.
Типы возвращаемых данных
Возвращает тип данных аргумента с самым высоким приоритетом. Дополнительные сведения см. в разделе "Приоритет типа данных".
Замечания
Если результат объединения строк превышает предел в 8 000 байт, то он усекается. Однако если хотя бы одна из строк сцеплена является большим типом значения, усечение не происходит.
Строки и символы нулевой длины
Оператор +
объединения строк работает по-разному, если он работает с пустой строкой нулевой длины, чем при работе с NULL
неизвестными значениями. Символьная строка символа нулевой длины может быть указана в виде двух одинарных кавычек без каких-либо символов между ними. Двоичная строка нулевой длины может быть указана без 0x
каких-либо байтовых значений, указанных в шестнадцатеричной константе. При сцеплении строки нулевой длины всегда сцепляются две указанные строки.
Объединение значений NULL
При работе со строками со NULL
значением результат объединения зависит от параметров сеанса. Как и при арифметических операциях, выполняемых для NULL
значений, при NULL
добавлении значения к известному значению результат обычно является неизвестным значением, операция объединения строк, выполняемая со NULL
значением, также должна привести к результату NULL
.
Однако можно изменить данное поведение, поменяв значение CONCAT_NULL_YIELDS_NULL
для текущего сеанса. Дополнительные сведения см. в описании SET CONCAT_NULL_YIELDS_NULL.
Использование CAST и CONVERT при необходимости
При сцеплении двоичных строк с любыми символами между двоичными строками необходимо использовать явное преобразование в символьные данные.
В следующих примерах показано, когда CAST
CONVERT
необходимо использовать двоичное объединение, а также когда CONVERT
CAST
или , не нужно использовать.
В этом примере нет или CAST
функция не CONVERT
требуется, так как этот пример объединяет две двоичные строки.
DECLARE @mybin1 VARBINARY(5), @mybin2 VARBINARY(5);
SET @mybin1 = 0xFF;
SET @mybin2 = 0xA5;
-- No CONVERT or CAST function is required because this example
-- concatenates two binary strings.
SELECT @mybin1 + @mybin2;
В этом примере требуется или CAST
функция, CONVERT
так как этот пример объединяет две двоичные строки плюс пробел.
DECLARE @mybin1 VARBINARY(5), @mybin2 VARBINARY(5);
SET @mybin1 = 0xFF;
SET @mybin2 = 0xA5;
-- A CONVERT or CAST function is required because this example
-- concatenates two binary strings plus a space.
SELECT CONVERT(VARCHAR(5), @mybin1) + ' '
+ CONVERT(VARCHAR(5), @mybin2);
-- Here is the same conversion using CAST.
SELECT CAST(@mybin1 AS VARCHAR(5)) + ' '
+ CAST(@mybin2 AS VARCHAR(5));
Примеры
Примеры кода Transact-SQL в этой статье используют AdventureWorks2022
базу данных или AdventureWorksDW2022
пример базы данных, которую можно скачать с домашней страницы примеров и проектов сообщества Microsoft SQL Server.
А. Использование объединения строк
В следующем примере создается один столбец под заголовком Name
столбца из нескольких символьных столбцов с именем семьи пользователя, за которым следует запятая, одно пространство, а затем имя пользователя. Результирующий набор находится в порядке возрастания, алфавитного порядка по имени семейства, а затем по первому имени.
SELECT (LastName + ', ' + FirstName) AS Name
FROM Person.Person
ORDER BY LastName ASC, FirstName ASC;
B. Объединение числовых и датовых типов данных
В приведенном ниже примере функция CONVERT
используется для объединения типов данных numeric и date.
SELECT 'The order is due on ' + CONVERT(VARCHAR(12), DueDate, 101)
FROM Sales.SalesOrderHeader
WHERE SalesOrderID = 50001;
GO
Вот результирующий набор.
------------------------------------------------
The order is due on 04/23/2007
C. Использование нескольких строкового объединения
В следующем примере объединяются несколько строк для формирования одной длинной строки для отображения имени семьи и первого инициала вице-президентов в Adventure Works Cycles. Запятая добавляется после имени семьи и периода после первого инициала.
SELECT (LastName + ',' + SPACE(1) + SUBSTRING(FirstName, 1, 1) + '.') AS Name, e.JobTitle
FROM Person.Person AS p
JOIN HumanResources.Employee AS e
ON p.BusinessEntityID = e.BusinessEntityID
WHERE e.JobTitle LIKE 'Vice%'
ORDER BY LastName ASC;
GO
Вот результирующий набор.
Name Title
------------- ---------------`
Duffy, T. Vice President of Engineering
Hamilton, J. Vice President of Production
Welcker, B. Vice President of Sales
D. Использование больших строк в объединениях
В приведенном ниже примере выполняется объединение нескольких строк в одну длинную строку, а затем предпринимается попытка вычислить длину итоговой строки. Окончательная длина результирующих наборов составляет 16 000, так как оценка выражений начинается слева, @x
+ @y
+ @z
то есть => (@x + @z
) + . @y
В этом случае результат (@x
+ @z
) усечен на 8000 байт, а затем @y
добавляется в результирующий набор, что делает окончательную длину строки 16 000. Так как @y
это строка большого типа значения, усечение не происходит.
DECLARE @x VARCHAR(8000) = REPLICATE('x', 8000)
DECLARE @y VARCHAR(max) = REPLICATE('y', 8000)
DECLARE @z VARCHAR(8000) = REPLICATE('z',8000)
SET @y = @x + @z + @y
-- The result of following select is 16000
SELECT LEN(@y) AS y
GO
Вот результирующий набор.
y
-------
16000
Примеры: Azure Synapse Analytics и система платформы аналитики (PDW)
Примеры кода Transact-SQL в этой статье используют AdventureWorks2022
базу данных или AdventureWorksDW2022
пример базы данных, которую можно скачать с домашней страницы примеров и проектов сообщества Microsoft SQL Server.
Е. Использование нескольких строкового объединения
В следующем примере объединяются несколько строк для формирования одной длинной строки для отображения имени семейства и первого инициала вице-президентов в образце базы данных. Запятая добавляется после имени семьи и периода после первого инициала.
SELECT (LastName + ', ' + SUBSTRING(FirstName, 1, 1) + '.') AS Name, Title
FROM DimEmployee
WHERE Title LIKE '%Vice Pres%'
ORDER BY LastName ASC;
Вот результирующий набор.
Name Title
------------- ---------------
Duffy, T. Vice President of Engineering
Hamilton, J. Vice President of Production
Welcker, B. Vice President of Sales
Связанный контент
- || (Объединение строк) (Transact-SQL)
- += (назначение сцепления строк) (Transact-SQL)
- ALTER DATABASE (Transact-SQL)
- CAST и CONVERT (Transact-SQL)
- Преобразование типов данных (ядро СУБД)
- Типы данных (Transact-SQL)
- Выражения (Transact-SQL)
- Встроенные функции (Transact-SQL)
- Операторы (Transact-SQL)
- SELECT (Transact-SQL)
- Инструкции SET (Transact-SQL)