Aracılığıyla paylaş


+ (Dize birleştirme) (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnaliz Platformu Sistemi (PDW)Microsoft Fabric'teki SQL analiz uç noktasıMicrosoft Fabric'teki ambarMicrosoft Fabric'teki SQL veritabanı

İki veya daha fazla karakter veya ikili dize, sütun ya da dize ve sütun adlarının birleşimini tek bir ifadede (dize işleci) bir araya getiren bir dize ifadesindeki işleç. Örneğin SELECT 'book'+'case'; , döndürür bookcase.

Transact-SQL söz dizimi kuralları

Syntax

expression + expression

Arguments

expression

Resim, ntext veya metin veri türleri dışında karakter ve ikili veri türü kategorisindeki veri türlerinden herhangi birinin geçerli ifadesi. her iki ifade de aynı veri türünde olmalıdır veya bir ifade örtük olarak diğer ifadenin veri türüne dönüştürülebilmelidir.

Dönüş türleri

En yüksek önceliğe sahip bağımsız değişkenin veri türünü döndürür. Daha fazla bilgi için bkz. Veri türü önceliği.

Remarks

Dizelerin birleştirilme sonucu 8.000 bayt sınırını aşarsa, sonuç kesilir. Ancak, birleştirilmiş dizelerden en az biri büyük bir değer türüyse, kesme gerçekleşmez.

Sıfır uzunluklu dizeler ve karakterler

Dize + birleştirme işleci boş, sıfır uzunluklu bir dizeyle çalıştığında, ile veya bilinmeyen değerlerle NULLçalıştığından farklı davranır. Sıfır uzunluklu bir karakter dizesi, tırnak işaretleri içinde herhangi bir karakter olmadan iki tek tırnak işareti olarak belirtilebilir. Sıfır uzunluklu ikili dize, onaltılık sabitte belirtilen bayt değerleri olmadan 0x olarak belirtilebilir. Sıfır uzunluklu bir dizeyi birleştirmek her zaman belirtilen iki dizeyi birleştirir.

NULL değerleri birleştirme

Değer NULL içeren dizelerle çalışırken, birleştirmenin sonucu oturum ayarlarına bağlıdır. Değerler üzerinde NULL gerçekleştirilen aritmetik işlemlerde olduğu gibi, bilinen bir değere bir NULL değer eklendiğinde sonuç genellikle bilinmeyen bir değerdir, bir NULL değerle gerçekleştirilen dize birleştirme işlemi de sonuç NULL üretmelidir.

Ancak, geçerli oturum için ayarını CONCAT_NULL_YIELDS_NULL değiştirerek bu davranışı değiştirebilirsiniz. Daha fazla bilgi için bkz. SET CONCAT_NULL_YIELDS_NULL.

Gerektiğinde CAST ve CONVERT kullanımı

İkili dizeleri ve ikili dizeler arasındaki karakterleri birleştirirken karakter verilerine açık dönüştürme kullanılmalıdır.

Aşağıdaki örneklerde , veya CONVERTCASTikili birleştirme ile kullanılması gerektiği ve CONVERTveya CASTkullanılması gerekmediğinde gösterilmektedir.

Bu örnekte, bu örnek iki ikili dizeyi birleştirdiğinden CONVERT veya CAST işlevi gerekmez.

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;

Bu örnekte bir CONVERT veya CAST işlevi gereklidir çünkü bu örnek iki ikili dizeyi ve bir alanı birleştirir.

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

Bu makaledeki kod örnekleri, AdventureWorks2025 giriş sayfasından indirebileceğiniz AdventureWorksDW2025 veya örnek veritabanını kullanır.

A. Dize birleştirmeyi kullanma

Aşağıdaki örnek, birden çok karakter sütunundan sütun başlığı Name altında tek bir sütun oluşturur ve ardından kişinin aile adı, ardından virgül, tek bir boşluk ve ardından kişinin adı gösterilir. Sonuç kümesi, aile adına göre artan, alfabetik sırada ve ardından adla gösterilir.

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

B. Sayısal ve tarih veri türlerini birleştirme

Aşağıdaki örnekte CONVERT işlevi, sayısal ve tarih veri türlerini birleştirmek için kullanılır.

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

Sonuç kümesi aşağıdadır.

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

C. Birden çok dize birleştirme kullanma

Aşağıdaki örnek, Adventure Works Cycles'ta aile adını ve başkan yardımcılarının ilk baş harflerini görüntülemek üzere bir uzun dize oluşturmak için birden çok dizeyi birleştirir. Aile adından sonra virgül ve ilk başlangıçtan sonra bir nokta eklenir.

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

Sonuç kümesi aşağıdadır.

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

D. Birleştirmede büyük dizeler kullanma

Aşağıdaki örnek, bir uzun dize oluşturmak için birden çok dizeyi birleştirir ve son dizenin uzunluğunu hesaplamaya çalışır. sonuç kümesinin son uzunluğu 16.000'dir, çünkü ifade değerlendirmesi soldan başlar; yani, @x + @z + @y => (@x + @z) + @y. Bu durumda, (@x + @z) sonucu 8.000 bayt olarak kesilir ve sonuç kümesine @y eklenir ve bu da son dize uzunluğunu 16.000 yapar. @y büyük bir değer türü dizesi olduğundan kesme gerçekleşmez.

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

Sonuç kümesi aşağıdadır.

y
-------
16000

Örnekler: Azure Synapse Analytics ve Analytics Platform Sistemi (PDW)

Bu makaledeki kod örnekleri, AdventureWorks2025 giriş sayfasından indirebileceğiniz AdventureWorksDW2025 veya örnek veritabanını kullanır.

E. Birden çok dize birleştirme kullanma

Aşağıdaki örnek, örnek bir veritabanında aile adını ve başkan yardımcılarının ilk adını görüntülemek için bir uzun dize oluşturmak üzere birden çok dizeyi birleştirir. Aile adından sonra virgül ve ilk başlangıçtan sonra bir nokta eklenir.

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

Sonuç kümesi aşağıdadır.

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