Udostępnij za pośrednictwem


+ (Łączenie ciągów) (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Punkt końcowy analizy SQL w usłudze Microsoft FabricMagazyn w usłudze Microsoft FabricBaza danych SQL w usłudze Microsoft Fabric (wersja zapoznawcza)

Operator w wyrażeniu ciągu, który łączy co najmniej dwa znaki lub ciągi binarne, kolumny lub kombinację ciągów i nazw kolumn w jednym wyrażeniu (operator ciągu). Na przykład SELECT 'book'+'case'; zwraca wartość bookcase.

Transact-SQL konwencje składni

Syntax

expression + expression

Arguments

expression

Dowolne prawidłowe wyrażenie dowolnego z typów danych w kategorii typów danych znaków i danych binarnych, z wyjątkiem typów danych obrazu, ntekstu lub tekstu . Oba wyrażenia muszą być tego samego typu danych lub jedno wyrażenie musi być niejawnie konwertowane na typ danych drugiego wyrażenia.

Return types

Zwraca typ danych argumentu o najwyższym pierwszeństwie. Aby uzyskać więcej informacji, zobacz Pierwszeństwo typu danych.

Remarks

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 + łączenia 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 lub nieznanymi wartościami NULL. 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

Podczas pracy z ciągami z wartością NULL wynik łączenia zależy od ustawień sesji. Podobnie jak w przypadku operacji arytmetycznych wykonywanych na NULL wartościach, gdy NULL wartość jest dodawana do znanej wartości, wynik jest zazwyczaj nieznaną wartością, operacja łączenia ciągów wykonywana z wartością NULL powinna również spowodować wynik NULL .

Można jednak zmienić to zachowanie, zmieniając ustawienie CONCAT_NULL_YIELDS_NULL dla bieżącej sesji. 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 CONVERTlub 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));

Examples

Przykłady kodu w tym artykule korzystają z przykładowej bazy danych AdventureWorks2022 lub AdventureWorksDW2022, którą można pobrać ze strony głównej Przykładów programu Microsoft SQL Server i projektów społeczności.

A. Używanie łączenia ciągów

Poniższy przykład tworzy pojedynczą kolumnę pod nagłówkiem Name kolumny z wielu kolumn znaków z nazwą rodziny osoby, po której następuje przecinek, pojedyncza spacja, a następnie imię 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 łączenia wielu 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

Przykłady: Azure Synapse Analytics and Analytics Platform System (PDW)

Przykłady kodu w tym artykule korzystają z przykładowej bazy danych AdventureWorks2022 lub AdventureWorksDW2022, którą można pobrać ze strony głównej Przykładów programu Microsoft SQL Server i projektów społeczności.

E. Używanie łączenia wielu 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łów wiceprezesów w przykładowej bazie danych. Przecinek jest dodawany po nazwie rodziny i kropki po pierwszym inicjały.

SELECT (LastName + ', ' + SUBSTRING(FirstName, 1, 1) + '.') AS Name, Title
FROM DimEmployee
WHERE Title LIKE '%Vice Pres%'
ORDER BY LastName ASC;

Oto zestaw wyników.

Name               Title
-------------      ---------------
Duffy, T.          Vice President of Engineering
Hamilton, J.       Vice President of Production
Welcker, B.        Vice President of Sales