|| (Объединение строк) (Transact-SQL)
Применимо к: База данных SQL Azure
Оператор ||
каналов в строковом выражении объединяет два или более символьных или двоичных строк, столбцов или сочетание строк и имен столбцов в одно выражение (строковый оператор). Например, SELECT 'SQL ' || 'Server';
возвращает SQL Server
.
Соглашения о синтаксисе Transact-SQL
Синтаксис
expression || expression
Аргументы
выражение
Любое допустимое выражение любого из типов данных в категории символьного и двоичного типа данных, за исключением xml, json, image, ntext или текстовых типов данных. Оба выражения должны иметь одинаковый тип данных, или одно из выражений должно допускать неявное преобразование к типу данных другого выражения.
Типы возвращаемых данных
Возвращает тип данных аргумента с самым высоким приоритетом. Дополнительные сведения см. в разделе "Приоритет типа данных".
Замечания
Если результат объединения строк превышает предел в 8 000 байт, то он усекается. Однако если хотя бы одна из строк сцеплена является большим типом значения, усечение не происходит.
Строки и символы нулевой длины
Оператор ||
(объединение строк) ведет себя по-разному при работе с пустой строкой нулевой длины, чем при работе с NULL
неизвестными значениями. Символьная строка символа нулевой длины может быть указана в виде двух одинарных кавычек без каких-либо символов между ними. Двоичная строка нулевой длины может быть указана без 0x
каких-либо байтовых значений, указанных в шестнадцатеричной константе. При сцеплении строки нулевой длины всегда сцепляются две указанные строки.
Объединение значений NULL
Как и при арифметических операциях, NULL
выполняемых при NULL
добавлении значения в известное значение, результат обычно является значениемNULL
. Операция объединения строк, выполняемая со NULL
значением, также должна привести к результату NULL
.
Оператор ||
не учитывает SET CONCAT_NULL_YIELDS_NULL
параметр и всегда ведет себя так, как если бы поведение ANSI SQL было включено, что дает NULL
значение, если какой-либо из входных данных имеет значение 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
столбца из нескольких символьных столбцов с именем семьи (LastName
) пользователя, за которым следует запятая, одно пространство, а затем имяFirstName
() пользователя. Результирующий набор находится в порядке возрастания, алфавитного порядка по имени семейства, а затем по первому имени.
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
Связанный контент
- ||= (составное назначение) (Transact-SQL)
- + (объединение строк) (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)