TSQL de string ayrıştırma işlemleri ve sahte dizi kullanımı-1

23 Aralık 2008 – 16:30

TSQL 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

Bookmark and Share
  1. One Response to “TSQL de string ayrıştırma işlemleri ve sahte dizi kullanımı-1”

  2. 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

Post a Comment

Subscribe without commenting