|| (Łączenie ciągów) (Transact-SQL)
Dotyczy:usługi Azure SQL DatabaseAzure SQL Managed InstanceSQL Database w usłudze Microsoft Fabric
Operator ||
potoków w wyrażeniu ciągu łączy dwa lub więcej znaków lub ciągów binarnych, kolumn lub kombinację ciągów i nazw kolumn w jednym wyrażeniu (operator ciągu). Na przykład SELECT 'SQL ' || 'Server';
zwraca SQL Server
. Operator ||
jest zgodny ze standardem ANSI SQL na potrzeby łączenia ciągów. W programie SQL Server można również łączyć ciągi przy użyciu operatora +
i funkcji CONCAT()
.
Transact-SQL konwencje składni
Składnia
expression || expression
Argumenty
wyrażenia
Każde prawidłowe wyrażenie
Typy zwracane
Zwraca typ danych argumentu o najwyższym pierwszeństwie. Aby uzyskać więcej informacji, zobacz Pierwszeństwo typu danych.
Uwagi
Niektóre korzyści wynikające z używania składni łączenia ciągów ANSI obejmują:
Przenośność: użycie standardowego operatora
||
ANSI na potrzeby łączenia ciągów gwarantuje, że kod SQL jest przenośny w różnych systemach baz danych. Oznacza to, że można uruchamiać te same zapytania SQL na różnych platformach baz danych bez modyfikacji.Spójność: Przestrzeganie standardu ANSI promuje spójność w kodzie SQL, co ułatwia odczytywanie i konserwowanie, zwłaszcza podczas pracy w środowiskach z wieloma systemami baz danych.
Współdziałanie: standard ANSI jest powszechnie rozpoznawany i obsługiwany przez większość systemów baz danych zgodnych z programem SQL, zwiększając współdziałanie różnych systemów i narzędzi.
Zachowanie obcinania ciągów
Jeśli wynik łączenia ciągów przekracza limit 8000 bajtów, wynik zostanie obcięty. Jeśli jednak co najmniej jeden ze połączonych ciągów jest dużym typem wartości, obcięcie nie występuje.
Ciągi i znaki o zerowej długości
Operator ||
(łączenie ciągów) działa inaczej, gdy działa z pustym ciągiem o zerowej długości niż w przypadku pracy z wartościami NULL
lub nieznanymi. Ciąg znaków o zerowej długości można określić jako dwa pojedyncze znaki cudzysłowu bez żadnych znaków wewnątrz cudzysłowu. Ciąg binarny o zerowej długości można określić jako 0x
bez żadnych wartości bajtów określonych w stałej szesnastkowej. Łączenie ciągu o zerowej długości zawsze łączy dwa określone ciągi.
Łączenie wartości NULL
Podobnie jak w przypadku operacji arytmetycznych wykonywanych na wartościach NULL
, gdy wartość NULL
jest dodawana do znanej wartości, wynik jest zazwyczaj wartością NULL
. Operacja łączenia ciągów wykonana z wartością NULL
powinna również wygenerować wynik NULL
.
Operator ||
nie uwzględnia opcji SET CONCAT_NULL_YIELDS_NULL
i zawsze zachowuje się tak, jakby zachowanie ANSI SQL zostało włączone, co daje NULL
, jeśli którykolwiek z danych wejściowych jest NULL
. Jest to podstawowa różnica w zachowaniu między operatorami łączenia +
i ||
. Aby uzyskać więcej informacji, zobacz SET CONCAT_NULL_YIELDS_NULL.
Korzystanie z rzutowania i konwertowania w razie potrzeby
Jawna konwersja na dane znaków musi być używana podczas łączenia ciągów binarnych i wszystkich znaków między ciągami binarnymi.
W poniższych przykładach pokazano, kiedy CONVERT
, lub CAST
, muszą być używane z łączeniem binarnym, a gdy CONVERT
lub CAST
, nie trzeba używać.
W tym przykładzie nie jest wymagana żadna funkcja CONVERT
ani CAST
, ponieważ ten przykład łączy dwa ciągi binarne.
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
W tym przykładzie wymagana jest funkcja CONVERT
lub CAST
, ponieważ ten przykład łączy dwa ciągi binarne i spację.
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));
Przykłady
Przykłady kodu Transact-SQL w tym artykule korzystają z przykładowej bazy danych AdventureWorks2022
lub AdventureWorksDW2022
, którą można pobrać ze strony głównej Przykłady programu Microsoft SQL Server i projekty społeczności.
A. Używanie łączenia ciągów
Poniższy przykład tworzy jedną kolumnę pod nagłówkiem kolumny Name
z wielu kolumn znaków z nazwą rodziny (LastName
) osoby, po której następuje przecinek, pojedyncza spacja, a następnie imię (FirstName
) osoby. Zestaw wyników jest w kolejności rosnącej, alfabetycznej według nazwy rodziny, a następnie według imienia.
SELECT (LastName || ', ' || FirstName) AS Name
FROM Person.Person
ORDER BY LastName ASC, FirstName ASC;
B. Łączenie typów danych liczbowych i dat
W poniższym przykładzie użyto funkcji CONVERT
do łączenia liczbowych i typów danych daty.
SELECT 'The order is due on ' || CONVERT(VARCHAR(12), DueDate, 101)
FROM Sales.SalesOrderHeader
WHERE SalesOrderID = 50001;
GO
Oto zestaw wyników.
------------------------------------------------
The order is due on 04/23/2007
C. Używanie wielu łączenia ciągów
Poniższy przykład łączy wiele ciągów w celu utworzenia jednego długiego ciągu w celu wyświetlenia nazwy rodziny i pierwszego inicjała wiceprezesów w Adventure Works Cycles. Przecinek jest dodawany po nazwie rodziny i kropki po pierwszym inicjały.
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
Oto zestaw wyników.
Name Title
------------- ---------------`
Duffy, T. Vice President of Engineering
Hamilton, J. Vice President of Production
Welcker, B. Vice President of Sales
D. Używanie dużych ciągów w łączenia
Poniższy przykład łączy wiele ciągów w celu utworzenia jednego długiego ciągu, a następnie próbuje obliczyć długość końcowego ciągu. Końcowa długość zestawu wyników wynosi 16 000, ponieważ ocena wyrażeń zaczyna się od lewej, czyli @x
+ @z
+ @y
=> (@x + @z
) + @y
. W tym przypadku wynik (@x
+ @z
) jest obcięty na 8000 bajtów, a następnie @y
jest dodawany do zestawu wyników, co sprawia, że końcowa długość ciągu wynosi 16 000. Ponieważ @y
jest ciągiem typu dużej wartości, obcięcie nie występuje.
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
Oto zestaw wyników.
y
-------
16000
Powiązana zawartość
- ||= (przypisanie złożone) (Transact-SQL)
- + (łączenie ciągów) (Transact-SQL)
- CONCAT (Transact-SQL)
- += (przypisanie łączenia ciągów) (Transact-SQL)
- ALTER DATABASE (Transact-SQL)
- RZUTOWANIE i konwertowanie (Transact-SQL)
- konwersja typu danych (aparat bazy danych)
- Typy danych (Transact-SQL)
- Expressions (Transact-SQL)
- Czym są funkcje bazy danych SQL?
- Operatory (Transact-SQL)
- SELECT (Transact-SQL)
- INSTRUKCJE SET (Transact-SQL)