Aracılığıyla paylaş


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

Şunlar için geçerlidir: Microsoft Fabric'da Azure SQL VeritabanıAzure SQL Yönetilen ÖrneğiSQL veritabanı

Bir dize ifadesindeki || kanalları işleci, iki veya daha fazla karakteri veya ikili dizeyi, sütunu ya da dize ve sütun adlarının birleşimini tek bir ifadede (dize işleci) birleştirir. Örneğin, SELECT 'SQL ' || 'Server';SQL Serverdöndürür. || işleci, dizeleri birleştirmek için ANSI SQL standardını izler. SQL Server'da, + işlecini ve CONCAT() işlevini kullanarak dize birleştirme de yapabilirsiniz.

Transact-SQL söz dizimi kuralları

Sözdizimi

expression || expression

Bağımsız değişken

ifade

xml, json, resim, ntextveya 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.

Açıklamalar

ANSI dize birleştirme söz dizimini kullanmanın bazı avantajları şunlardır:

  • Taşınabilirlik: Dize birleştirme için ANSI standart || işlecini kullanmak, SQL kodunuzun farklı veritabanı sistemleri arasında taşınabilir olmasını sağlar. Bu, aynı SQL sorgularını değişiklik yapmadan çeşitli veritabanı platformlarında çalıştırabileceğiniz anlamına gelir.

  • Tutarlılık: ANSI standardına bağlı olmak, SQL kodunuzda tutarlılığı yükselterek, özellikle birden çok veritabanı sistemi olan ortamlarda çalışırken okunmasını ve bakımının daha kolay olmasını sağlar.

  • Birlikte çalışabilirlik: ANSI standardı çoğu SQL uyumlu veritabanı sistemi tarafından yaygın olarak tanınır ve desteklenir ve farklı sistemler ve araçlar arasındaki birlikte çalışabilirliği geliştirir.

Dize kesme davranışı

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 uzunlukta bir dizeyle çalıştığında NULLveya bilinmeyen değerlerle ç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

NULL değerlerde gerçekleştirilen aritmetik işlemlerde olduğu gibi, bilinen bir değere NULL bir değer eklendiğinde sonuç genellikle NULL bir değerdir. bir NULL değeriyle gerçekleştirilen dize birleştirme işlemi de NULL bir sonuç üretmelidir.

|| işleci SET CONCAT_NULL_YIELDS_NULL seçeneğini kabul etmez ve her zaman ANSI SQL davranışı etkinmiş gibi davranır ve girişlerden herhangi biri NULLise NULL verir. bu, + ve || birleştirme işleçleri arasındaki davranıştaki birincil farktır. 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 CASTCONVERTikili 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));

Örnekler

Bu makaledeki Transact-SQL kod örnekleri, Microsoft SQL Server Örnekleri ve Topluluk Projeleri giriş sayfasından indirebileceğiniz AdventureWorks2022 veya AdventureWorksDW2022 örnek veritabanını kullanır.

A. Dize birleştirmeyi kullanma

Aşağıdaki örnek, birden çok karakter sütunundan Name sütun başlığı altında, kişinin aile adı (LastName) ve ardından virgül, tek bir boşluk ve ardından kişinin adını (FirstName) içeren tek bir sütun oluşturur. 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ştirmesi 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