Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к: Sql Server 2025 (17.x)
База данных
SQL Azure Управляемого экземпляра
SQL Azure в Microsoft Fabric
Оператор || каналов в строковом выражении объединяет два или более символьных или двоичных строк, столбцов или сочетание строк и имен столбцов в одно выражение (строковый оператор). Например, SELECT 'SQL ' || 'Server'; возвращает SQL Server. Оператор || следует стандарту ANSI SQL для объединения строк. В SQL Server можно также выполнить объединение строк с помощью оператора + и функции CONCAT().
Соглашения о синтаксисе Transact-SQL
Syntax
expression || expression
Arguments
expression
Любое допустимое выражение любого из типов данных в категории символьного и двоичного типа данных, за исключением xml, json, image, ntext или текстовых типов данных. Оба выражения должны иметь одинаковый тип данных, или одно из выражений должно допускать неявное преобразование к типу данных другого выражения.
Типы возвращаемых данных
Возвращает тип данных аргумента с самым высоким приоритетом. Дополнительные сведения см. в разделе "Приоритет типа данных".
Remarks
Ниже приведены некоторые преимущества использования синтаксиса объединения строк ANSI:
Переносимость. Использование стандартного оператора ANSI
||для объединения строк гарантирует перенос кода SQL в разных системах баз данных. Это означает, что вы можете выполнять одни и те же запросы SQL на различных платформах баз данных без изменений.Согласованность. Соблюдение стандарта ANSI способствует согласованности в коде SQL, что упрощает чтение и обслуживание, особенно при работе в средах с несколькими системами баз данных.
Взаимодействие. Стандарт ANSI широко распознается и поддерживается большинством систем баз данных, совместимых с SQL, повышая взаимодействие между различными системами и инструментами.
Оператор || объединения строк доступен в Управляемом экземпляре SQL Azure с политикой обновленияSQL Server 2025 или Always-up-to-date.
Поведение усечения строк
Если результат объединения строк превышает предел в 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 при необходимости
При сцеплении двоичных строк с любыми символами между двоичными строками необходимо использовать явное преобразование в символьные данные.
В следующих примерах показано, когда CONVERTCASTнеобходимо использовать двоичное объединение, а также когда CONVERTCASTили , не нужно использовать.
В этом примере нет или CONVERT функция не CAST требуется, так как этот пример объединяет две двоичные строки.
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
В этом примере требуется или CONVERT функция, CAST так как этот пример объединяет две двоичные строки плюс пробел.
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));
Examples
Примеры кода в этой статье используют базу данных образца AdventureWorks2025 или AdventureWorksDW2025, которую можно скачать с домашней страницы образцов и проектов сообщества Microsoft SQL Server и.
A. Использование объединения строк
В следующем примере создается один столбец под заголовком 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 + @z + @yто есть => (@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)
- CONCAT (Transact-SQL)
- += (назначение сцепления строк) (Transact-SQL)
- Изменить базу данных (Transact-SQL)
- CAST и CONVERT (Transact-SQL)
- Преобразование типов данных (ядро СУБД)
- Типы данных (Transact-SQL)
- Выражения (Transact-SQL)
- Что такое функции базы данных SQL?
- Операторы (Transact-SQL)
- SELECT (Transact-SQL)
- Инструкции SET (Transact-SQL)