TSQL de string ayrıştırma işlemleri ve sahte dizi kullanımı-1
23 Aralık 2008 – 16:30TSQL de birbirinden virgülle ayrılmış string listelerini ayrıştırmak arada sırada ihtiyaç duyduğumuz bir kullanım şeklidir. Normal koşullarda, ilişkili database modelinde böyle bir durum ile karşılaşılmaz.
Bazen Sql programcıları çift değerli sütün yâda değişken kullanma gereksinimi ile karşı karşıya kalırlar( genelliklede veri başka bir yerden geldiğinde). TSql de liste ya da dizi tiplerini destekleyen yerleşik bir yapı olmadığı için, çift değerleri bir araya getirmek de genellikle delimited VARCHAR strings kullanılır. İlişkideki bir öznitelik sadece süzülmüş uygun bir tipe sahip olabildiğinden beri hepimizin bildiği gibi çift değerleri tek bir sütunda tutmak ilişkili modelin temel kuralıdır.
SQL tabloları doğası gereği çift değerli sütunlara izin vermez. Bu XML veri tipleri ortaya çıkmadan önce mantıklı bir yapı idi. Programcılar ara sıra değişen başarı dereceleri ile bu kuralı eziyorlardı. Kullanıcılar daima virgül ya da boşluk gibi bir karakterle ayrılmış daha küçük stringlerin bir kombinasyonu olan tek bir string yorumlamak zorunda kalabilirler. Programcılar bu nedenle, var olan string fonksiyonlarının gücünden faydalanarak, birleştirilmiş stringlerden istediği kadar küçük parçaları söküp çıkartabilirler.
Burada önerilen methodlar sadece eksiliği gidermek için kullanılmalı, üretim sistemleri için önerilmez. Eğer ürün kılavuzunda dökümanta edilmemiş bir method kullanıyorsan, onları doğruca ikaz et ve konu ile ilgili bütün uyarıları yapın.
Göz önüne alınması gerekenler:
Bir diziyi parse eden ve veri yönetimi sağlayan çoğu method veriyi tabloya çift satırmış gibi eklemek için kullanılabilir. Sonraki kısımda anlatılacaklar: bir kullanma şekli tanımlamak ve bir değişkende, parametrede ya da hatta column değeri gibi tanımlanan stringdeki altbölümleri bir tabloya kaydetmek. Örnekler virgülle ayrılmış listelerdir.Genel olarak bilinen değerleri ‘item- 1,item-2,item-3….item-n’ olan CSV Gibi.
Pratikte, stringleri ayırmak için herhangi bir karakteri kullanabilirsin space de dahil olmak üzere methodları karaktere göre uyarlayabilirsin. Aşağıdaki örnekte, Northwind database inde Customer tablosundan rastgele birkaç müşteri tanımı seçilmiş. Aşağıdaki her bir örnek için bu listeyi kullanacağız.
DECLARE @p VARCHAR(50)
SET @p = ‘ALFKI, LILAS, PERIC, HUNGC, SAVEA, SPLIR, LONEP, GROSR’
Direk Data karşılaştırması:
Basit karşılaştırmalar için, karmaşık alışılmış kullanımlara gerek yok. TSQL içinde içsel eşleştirme kalıplarını içeren özellikler çoğu koşulda direk olarak kullanılabilir.
Bir ilk olarak örnek değerler listesinden seçmek ve onu WHERE koşulundaki IN listesinde kullanmak. Aşağıda bazı genel methodlar:
CHARINDEX() fonksiyonunu kullanma:
Expression2 içinde expression1 arar ve eğer bulursa başlangıç pozisyonunu döndürür. Arama start_location dan başlar.
CHARINDEX ( expression1, expression2 [ , start_location ] )
SELECT CustomerID, ContactName, CompanyName
FROM Northwind.dbo.Customers
WHERE CHARINDEX( ‘,’ + CustomerID + ‘,’, ‘,’ + @p + ‘,’ ) > 0 ;
CustomerID ContactName CompanyName
———- —————————— ——————————
ALFKI Maria Anders Alfreds Futterkiste
GROSR Manuel Pereira GROSELLA-Restaurante
HUNGC Yoshi Latimer Hungry Coyote Import Store
LILAS Carlos González LILA-Supermercado
LONEP Fran Wilson Lonesome Pine Restaurant
PERIC Guillermo Fernández Pericles Comidas clásicas
SAVEA Jose Pavarotti Save-a-lot Markets
SPLIR Art Braunschweiger Split Rail Beer & Ale


One Response to “TSQL de string ayrıştırma işlemleri ve sahte dizi kullanımı-1”
güzel bir makale, bu tarz işlemleri uygulama tarafında yapınca sistem biraz yavaşlıyor sanırım db server tarafında daha hızlı çözülür bu işlem
By ahmet on Ara 24, 2008