|| (Dize birleştirme) (Transact-SQL)
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 Server
dö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 NULL
veya 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 NULL
ise 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 CAST
CONVERT
ikili birleştirme ile kullanılması gerektiği ve CONVERT
veya CAST
kullanı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
İlgili içerik
- || = (Bileşik atama) (Transact-SQL)
- + (Dize birleştirme) (Transact-SQL)
- CONCAT (Transact-SQL)
- += (Dize Birleştirme Ataması) (Transact-SQL)
- ALTER DATABASE (Transact-SQL)
- CAST ve CONVERT (Transact-SQL)
- Veri türü dönüştürme (Veritabanı Altyapısı)
- Veri türleri (Transact-SQL)
- İfadeleri (Transact-SQL)
- SQL veritabanı işlevleri nelerdir?
- İşleçleri (Transact-SQL)
- SELECT (Transact-SQL)
- SET Deyimleri (Transact-SQL)