1. Temel Kullanım |
2. 2022’de Gelen Yenilikler |
3. Dinamik Veriler ve Pratik Kullanımlar |
4. Performansı Artırmak İçin İpuçları |
5. En Sık Sorulan Sorular |
STRING_SPLIT fonksiyonu, SQL Server 2016 (13.x) ve üzeri sürümlerde tanıtılmıştır. Bu fonksiyon, bir metin dizesini belirli bir ayırıcıya (delimiter) göre böler ve sonuçları tek bir sütunlu bir tablo olarak döndürür. Özellikle veri işleme ve analiz süreçlerinde, virgül, boşluk gibi ayraçlarla ayrılmış metinleri parçalamak için oldukça faydalıdır.
1. Temel Kullanım:
SELECT value
FROM STRING_SPLIT('Ali,Veli,Ahmet', ',');
Bu sorgu, giriş metnindeki elemanları tek tek döndürür. Ancak SQL Server 2016 ve 2019 sürümlerinde sıralama bilgisi (parçaların orijinal pozisyonu) sağlanmaz.
2. STRING_SPLIT’in 2022’de Gelen Yenilikleri
SQL Server 2022 ile birlikte, STRING_SPLIT fonksiyonuna opsiyonel bir ordinal sütunu eklendi. Bu sütun, metin parçalarının orijinal sıralamasını koruyarak döndürür. Yeni parametre, özellikle sıralamanın önemli olduğu işlemler için büyük kolaylık sağlar.
Yeni Kullanım Örneği:
SELECT value, ordinal
FROM STRING_SPLIT('Ali,Veli,Ahmet', ',', 1);
value | ordinal |
---|---|
Ali | 1 |
Veli | 2 |
Ahmet | 3 |
3. STRING_SPLIT ile Dinamik Veriler ve Pratik Kullanımlar
STRING_SPLIT’in yeni ordinal sütunu özelliği, aşağıdaki gibi dinamik veri işleme durumlarında oldukça kullanışlıdır:
Metinlerin Sıralı Kullanımı
Bir metni parçalamak ve orijinal sırasına göre işlem yapmak istediğinizde:
SELECT value
FROM STRING_SPLIT('SQL,Server,2022,Yenilikleri', ',', 1)
ORDER BY ordinal;
ETL Süreçlerinde Verilerin Kaydedilmesi
Parçalanan veriler sıralı olarak bir tabloya kaydedilebilir:
CREATE TABLE #Temp (
ID INT,
Value NVARCHAR(50),
Ordinal INT
);
INSERT INTO #Temp (ID, Value, Ordinal)
SELECT 1, value, ordinal
FROM STRING_SPLIT('Ali,Veli,Ahmet', ',', 1);
Örnek Senaryo: Kullanıcı Girdisi ile Dinamik Veri İşleme
Bir kullanıcıdan alınan virgülle ayrılmış bir dizi isimle işlem yapalım:
DECLARE @Names NVARCHAR(MAX) = 'Ali,Veli,Ahmet,Mehmet';
SELECT value, ordinal
FROM STRING_SPLIT(@Names, ',', 1)
WHERE ordinal % 2 = 0; -- Sadece çift sıralı isimleri al
Bu sorgu, yalnızca çift sıralı isimleri döndürür (Veli ve Mehmet).
4. Performansı Artırmak İçin İpuçları
- Sıralama Gereksinimi Olan Veriler İçin ordinal Kullanın: SQL Server 2022 öncesi sürümlerde sıralama eklemek için ek işlemler gerekiyordu. ordinal özelliği, bu ek yükü ortadan kaldırarak sorgu performansını artırır.
- Büyük Veri Kümelerinde STRING_SPLIT: STRING_SPLIT, büyük metin kümelerinde oldukça hızlı çalışır. Ancak işlem yoğunluğu olan durumlarda ordinal sütununu kullanmak, ek sıralama maliyetlerini düşürür.
- Alternatif Çözümlerle Karşılaştırın: STRING_SPLIT fonksiyonu yeterli olmadığında, XML tabanlı yaklaşımlar gibi diğer çözümleri değerlendirin. Ancak çoğu durumda 2022 sürümü, performans açısından daha avantajlıdır.
5. STRING_SPLIT Hakkında Sık Sorulan Sorular
Eski SQL Server sürümlerinde sıralama nasıl eklenir?
WITH CTE AS (
SELECT value
FROM STRING_SPLIT('Ali,Veli,Ahmet', ',')
)
SELECT value, ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS ordinal
FROM CTE;
Ordinal sütunu kullanımı zorunlu mu?
Hayır, ordinal sütunu opsiyoneldir. Eğer sıralama bilgisi gerekmiyorsa, eski sürümlerdeki gibi kullanabilirsiniz:
SELECT value
FROM STRING_SPLIT('Ali,Veli,Ahmet', ',');
Hangi durumlarda STRING_SPLIT yerine başka yöntemler tercih edilmeli?
Eğer metin içinde birden fazla ayırıcı ile işlem yapmanız gerekiyorsa ya da çok karmaşık veri manipülasyonları yapacaksanız, STRING_SPLIT yerine XML veya JSON tabanlı yöntemler daha uygun olabilir.
Sonuç
SQL Server 2022 ile STRING_SPLIT fonksiyonuna eklenen ordinal sütunu, metin işleme işlemlerinde önemli bir geliştirme sunuyor. Bu yenilik, verilerin sıralama bilgisiyle birlikte işlenmesini kolaylaştırıyor ve daha hızlı sorgular yazılmasına olanak tanıyor.
Herkese çalışma hayatında ve yaşamında başarılar ve kolaylıklar dilerim!