Udostępnij za pośrednictwem


+ (String Concatenation) (Transact-SQL)

Operator wyrażenia tekstowego, który łączy dwa lub więcej znaków lub ciągów binarnych, kolumna lub kombinacji ciągi i nazw kolumn w jedno wyrażenie (operator ciąg znaków).

Topic link iconKonwencje składni języka Transact-SQL

expression + expression

Argumenty

  • expression
    Jest ważne w każdym wyrażenie jeden z typów danych w znaków i kategorię typu danych binarnych, z wyjątkiem image, ntext, lub text typy danych. Oba wyrażenia musi być tego samego typu danych, lub jedno wyrażenie musi być w stanie można niejawnie przekonwertować na typ danych inne wyrażenia.

    Jawna konwersja na dane znakowe muszą być używane podczas łączenia ciągów binarnych i znaków między ciągów binarnych.Poniższy przykład pokazuje, kiedy CONVERT lub CAST, musi być używany z łączenie binarne i kiedy CONVERT lub CAST, nie musi być używany.

    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
    -- 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))
    

Typy wynik

Zwraca wartość argumentu typ danych o najwyższym priorytecie.Aby uzyskać więcej informacji zobaczData Type Precedence (Transact-SQL).

Remarks

+ (Ciąg łączenie) operator zachowuje się inaczej działa z pustego, o zerowej długości ciąg znaków niż działa o wartości NULL, lub nieznany.Ciąg znaków o zerowej długości można określić jako dwa znaki pojedynczego cudzysłowu bez żadnych znaków wewnątrz cudzysłowów.Ciąg binarny o zerowej długości można określić jako 0 x bez określonej w systemie szesnastkowym stała wartości bajtu.Zawsze konkatenację ciąg znaków o zerowej długości łączy dwa ciągi określone.Podczas pracy z ciągami o wartości null, wynik łączenie zależy od ustawień sesja.Podobnie jak operacji arytmetycznych, które są wykonywane na wartości null, gdy wartość null jest dodawany do znanej wartości zazwyczaj jest nieznana wartość, a ciąg operacji łączenie, która jest wykonywane z wartością null powinny być też wynik wartości null.Jednak to zachowanie można zmienić, zmieniając ustawienie CONCAT_NULL_YIELDS_NULL dla bieżącej sesja.Aby uzyskać więcej informacji zobaczSET CONCAT_NULL_YIELDS_NULL (Transact-SQL).

Jeśli wynik łączenie ciągów znaków przekracza limit 8000 bajtów, wynik zostanie obcięta do liczby całkowitej.Niemniej jednak jeśli co najmniej jeden z ciągów, połączenie jest typu dużą wartość, obcinania nie występuje.

Przykłady

A.Za pomocą ciąg łączenie

Poniższy przykład tworzy w jednej kolumnie pod nagłówkiem kolumna Name z wielu kolumnach znaków, z ostatnią nazwę kontaktu, a po nim przecinek, pojedynczą spację, a następnie imię kontaktu. Zestaw wyników jest w porządku rosnącym, alfabetycznym według nazwiska, a następnie według imienia.

USE AdventureWorks;
GO
SELECT (LastName + ', ' + FirstName) AS Name
FROM Person.Contact
ORDER BY LastName ASC, FirstName ASC;

B.Łączenie typów danych liczbowych i data

W poniższym przykładzie użyto funkcja konwersji, aby złączyć numeric i date typy danych.

USE AdventureWorks;
GO
SELECT 'The order is due on ' + CONVERT(varchar(12), DueDate, 101)
FROM Sales.SalesOrderHeader
WHERE SalesOrderID = 50001;
GO

Here is the result set.

------------------------------------------------ 
The order is due on 04/23/2003            

(1 row(s) affected)

C.Za pomocą wielu Konkatenacja ciągów

W poniższym przykładzie łączy kilka ciągów tworzą jeden długi ciąg do wyświetlania nazwiska i wstępnego pierwszego z prezesi vice na Adventure Works Cycles. Przecinek jest dodawany po nazwiska i okresu po pierwszym wstępnego.

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

Here is the result set.

Name               Title                                         
-------------      ---------------
Duffy, T.         Vice President of Engineering
Hamilton, J.      Vice President of Production
Welcker, B.       Vice President of Sales
(3 row(s) affected)