T-SQL’de CONCAT ve STRING_AGG ile Metin Birleştirme

SQL Server’da verilerle çalışırken, farklı veri parçalarını anlamlı bir bütün haline getirmek için çeşitli fonksiyonlar kullanılır. Modern T-SQL yazımında bu ihtiyacı karşılayan en güçlü iki araç CONCAT ve STRING_AGG fonksiyonlarıdır.

CONCAT fonksiyonu, iki veya daha fazla karakter dizisini (string) uç uca eklemek için kullanılır. SQL Server 2012 ile hayatımıza giren bu fonksiyon, eski tip + operatörü ile birleştirme yapmanın getirdiği riskleri ortadan kaldırır.

Özellikleri:

  • NULL Güvenliği: Eğer birleştirilen değerlerden biri NULL ise, CONCAT bunu boş bir string gibi kabul eder ve sonucu bozmaz. (Eski yöntemde NULL + ‘Metin’ sonucu NULL dönerdi).
  • Otomatik Dönüştürme: Sayısal veya tarihsel verileri birleştirirken otomatik olarak string tipine dönüştürür; yani CAST veya CONVERT kullanmanıza gerek kalmaz.

Örnek Kullanım:

SELECT CONCAT(Ad, ' ', Soyad, ' - ', Yas) AS KisiBilgisi
FROM Kullanicilar;

Bu sorgu, Ad, Soyad ve Yas sütunlarını tek bir metin hücresinde birleştirir.

SQL Server 2017 sürümüyle tanıtılan STRING_AGG, bir sütundaki birden fazla satırı tek bir satırda, aralarına belirli bir ayırıcı (separator) koyarak birleştirmek için kullanılır. Genellikle GROUP BY ile birlikte kullanılır.

Özellikleri:

  • Liste Oluşturma: Bir kategoriye ait tüm alt elemanları virgül veya tire ile yan yana dizmek için idealdir.
  • Sıralama Desteği: Birleştirilen elemanların hangi sırayla dizileceğini WITHIN GROUP (ORDER BY …) ifadesiyle belirleyebilirsiniz.

Örnek Kullanım:

Bir siparişteki ürünleri tek bir satırda görmek istediğimizi varsayalım:

SELECT SiparisID, 
       STRING_AGG(UrunAdi, ', ') WITHIN GROUP (ORDER BY UrunAdi ASC) AS UrunListesi
FROM SiparisDetaylari
GROUP BY SiparisID;

Bu sorgu, her sipariş numarası için ürünleri alfabetik sırayla yan yana yazar (Örn: Elma, Muz, Portakal).

CONCAT ve STRING_AGG Arasındaki Farklar

Aşağıdaki tablo, bu iki fonksiyonun hangi senaryolarda tercih edilmesi gerektiğini özetlemektedir:

ÖzellikCONCATSTRING_AGG
Temel AmacıFarklı sütunları birleştirmek.Farklı satırları birleştirmek.
Kullanım YönüYatay (Horizontal) birleştirme.Dikey (Vertical / Aggregate) birleştirme.
Sürüm DesteğiSQL Server 2012 ve sonrası.SQL Server 2017 ve sonrası.
Ayırıcı (Separator)Her parametre arasına manuel yazılır.Fonksiyonun ikinci parametresi olarak bir kez tanımlanır.
GereksinimTek başına her satır için çalışır.Genellikle GROUP BY ile kullanılır.

Hangisini Ne Zaman Kullanmalısınız:

  • Bir kullanıcının adını, soyadını ve ünvanını birleştirip bir kartvizit formatı oluşturmak istiyorsanız CONCAT kullanın.
  • Bir sınıftaki tüm öğrencilerin isimlerini, sınıf bazında gruplayıp aralarına virgül koyarak listelemek istiyorsanız STRING_AGG kullanın.

T-SQL’de metin işleme yetenekleri geliştikçe, kod yazımı daha güvenli ve okunabilir hale gelmiştir. CONCAT bizi NULL değer hatalarından kurtarırken, STRING_AGG geçmişte çok karmaşık FOR XML PATH yöntemleriyle yaptığımız satır birleştirme işlemini tek satıra indirgemiştir. Her iki fonksiyon da veri raporlama aşamasında bir SQL geliştiricisinin en yakın dostudur.

Başka makalede görüşmek dileğiyle..

“Şüphesiz güçlükle beraber bir kolaylık vardır. Gerçekten, güçlükle beraber bir kolaylık vardır.”  İnşirah Suresi; 5-6. Ayet

Author: Yunus YÜCEL

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir