+ (Сцепление строк) (Transact-SQL)
Оператор в строковом выражении, сцепляющий два или более символа или двоичных строки, столбца или сочетании строк и имен столбцов в одно выражение (строковый оператор).
Соглашения о синтаксисе в Transact-SQL
Синтаксис
expression + expression
Аргументы
expression
Любое действительное выражение любого типа данных в категории символьных и двоичных данных, за исключением типов данных image, ntext или text. Оба выражения должны быть одного типа данных, либо должна иметься возможность неявного преобразования типа данных одного выражения в тип данных другого выражения.При сцеплении двоичных строк с любыми символами между двоичными строками необходимо использовать явное преобразование в символьные данные. В следующем примере показано, когда с двоичным сцеплением необходимо использовать функции CONVERT или CAST, а когда они могут не применяться.
DECLARE @mybin1 binary(5), @mybin2 binary(5) SET @mybin1 = 0xFF SET @mybin2 = 0xA5 -- No CONVERT or CAST function is required because this example -- concatenates two binary strings. SELECT @mybin1 + @mybin2 -- 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))
Замечания
При работе с пустыми строками нулевой длины оператор + (сцепление строк) ведет себя иначе, чем при работе со значениями NULL или с неизвестными значениями. Символьная строка символа нулевой длины может быть указана в виде двух одинарных кавычек без каких-либо символов между ними. Двоичная строка нулевой длины может быть указана как 0x без указания каких-либо байтовых значений в шестнадцатеричной константе. При сцеплении строки нулевой длины всегда сцепляются две указанные строки. При работе со строками со значением NULL результат сцепления зависит от настроек сеанса. При присоединении нулевого значения к известному значению результатом будет неизвестное значение, сцепление строк с нулевым значением также дает нулевое значение, как и в арифметических действиях с нулевыми значениями. Однако можно изменить данное поведение, поменяв настройку CONCAT_NULL_YIELDS_NULL для текущего сеанса. Дополнительные сведения см. в разделе SET CONCAT_NULL_YIELDS_NULL (Transact-SQL).
Если результат сцепления строк превышает предел в 8 000 байт, то он усекается. Однако усечения не произойдет, если хотя бы одна из сцепляемых строк принадлежит к типу больших значений.
Типы результата
Возвращает тип данных аргумента с самым высоким приоритетом. Дополнительные сведения см. в разделе Приоритет типов данных (Transact-SQL).
Примеры
А. Использование строкового сцепления
Следующий пример создает единственный столбец под заголовком Name
из нескольких символьных столбцов, где за фамилией контактного представителя следуют запятая, один пробел и имя контактного представителя. Результирующий набор сортируется в алфавитном порядке по возрастанию, сначала по фамилии, а затем по имени.
USE AdventureWorks;
GO
SELECT (LastName + ', ' + FirstName) AS Name
FROM Person.Contact
ORDER BY LastName ASC, FirstName ASC;
Б. Объединение числовых типов данных и дат
Следующий пример использует функцию CONVERT для сцепления типов данных numeric и date.
USE AdventureWorks;
GO
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/2003
(1 row(s) affected)
В. Использование сцепления нескольких строк
Следующий пример сцепляет несколько строк в одну длинную строку для отображения фамилии и первой буквы инициалов вице-президентов в Adventure Works Cycles. После фамилии ставится запятая, а после первой буквы инициалов — точка.
USE AdventureWorks;
GO
SELECT (LastName + ',' + SPACE(1) + SUBSTRING(FirstName, 1, 1) + '.') AS Name, e.Title
FROM Person.Contact AS c
JOIN HumanResources.Employee AS e
ON c.ContactID = e.ContactID
WHERE e.Title 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
(3 row(s) affected)
См. также
Справочник
ALTER DATABASE (Transact-SQL)
Функции CAST и CONVERT (Transact-SQL)
Типы данных (Transact-SQL)
Выражения (Transact-SQL)
Функции (Transact-SQL)
Операторы (Transact-SQL)
SELECT (Transact-SQL)
SET (Transact-SQL)
Другие ресурсы
Преобразование типов данных (компонент Database Engine)
Установка параметров базы данных