19 Haziran 2015 Cuma

t-Sql Split

Merhaba arkadaşlar,

ilk makalemde, bir sonraki makalemde paylaşmak istediğim, veritabanındaki nesneleri(görünümler, prosedürler, fonksiyonlar gibi) güncellemek için oluşturduğum, bu nesnelerin oluşturma scriptlerini döndüren bir aracın kullandığı tablo değerli bir fonksiyonu (table-valued function) oluşturacağız. Oluşturacağımız bu fonksiyonun ayrı olarak ta işime yaradığını belirtmek isterim.

Aslında bu fonksiyon .Net programcılarının yapancı olmadıkları String sınıfının Split fonksiyonu benzeri olacak. .Net tarafında bu fonksiyonun ilk varyasyonunun görevi;

        // Summary:
        //     Returns a string array that contains the substrings in this instance that
        //     are delimited by elements of a specified Unicode character array. A parameter
        //     specifies the maximum number of substrings to return.
        public string[] Split(char[] separator, int count);

şeklinde belirtilmiş. Bizim oluşturacağımız fonsiyon ikinci parametredeki gibi bir sınırlandırıcı içermeyecek.

Buyrun başlayalım;

create function dbo.fn_Split
(
  @metin varchar(max)
  , @ayrac char(1)
)
returns @rTable table(id int identity(1,1),data varchar(64))
--sonuç tablomuzu tanımlıyoruz
as
begin

--@metin parametresi @ayraç parametresini içerdiği sürece döngü çalışacak.
while(CHARINDEX(@ayrac,@metin)>0)
begin
--ilk sonuç tabloya işleniyor
insert @rTable (data) values (ltrim(rtrim(SUBSTRING(@metin,0,CHARINDEX(@ayrac,@metin)))))
--bulunan alt metin @metin parametresinden çıkarılmalı.
set @metin = SUBSTRING(@metin,CHARINDEX(@ayrac,@metin)+1,LEN(@metin))
end
--@metin parametresinin son hali tabloya işleniyor. döngü dışındaki bu konumda @metin artık ayraç içermemektedir.
insert @rTable (data) values (ltrim(rtrim(SUBSTRING(@metin,1,LEN(@metin)))))
return
end;


çalışmasını görmek için;
select * from dbo.fn_Split('paylaşımın faydalı olması dileğiyle', N' ')

bir sonraki paylaşımda görüşmek dileğiyle.
Yaşar Şahin

Hiç yorum yok:

Yorum Gönder