Müdavim Girişi

E-Posta
Parola

Ücretsiz Kayıt Ol


Online Müdavimler (0 Kişi)
  • Online Kişi Bulunmadı

Yazar Hakkında
x
İsmail Kocacan
İsmail Kocacan is experienced on many development platforms and continues to learn technologies. Since the age of 16-17, dealing with software technologies. And continuous learning, teaching, research, continues to develop.
Lower Upper Fonksiyonlarını Biz Yazalım

Merhaba arkadaslar;

Bu makalemde sizlere gelistirmis oldugum Kullanici tanimli fonksiyonu (User Defined Function) paylasmak istiyorum. Fonksiyonun yaptigi is nedir haci abi diye sorarsaniz.
Hemen anlatayim;
 
Fonksiyonumuz Harfleri, Cümleleri Türkçe olarak Büyükten Küçüge - Küçükten büyüge, Ingilizce olarak Büyükten Küçüge - Küçükten büyüge Çeviren bir fonksiyon.
 
SQL serverda aslinda bu isi yapan lower, upper fonksiyonlari mevcut. Bunu çok önceden biliyordum. Lakin Unutmusum .Nitekim hepimiz insan evladiyiz. Beseriz Sasariz.
 
Fonksiyonlari yazmayi bitirdikden lower ve upper fonksiyonlari aklima geldi.  Evet, O kadar mantigi üzerinde kafa yorduktan sonra.
dbo. BuyukToKucukToBuyuk

-- Türkçe Büyükten Küçüge,Ingilizce Büyükten Küçüge
-- Çevirme islemi yapan fonksiyondur
CREATE FUNCTION [dbo].[BuyukToKucukToBuyuk]
(
    @harfx char(1),
    @tipx tinyint,
    @dilx char(2)
)
RETURNS char(1)
AS
BEGIN
      declare @sonucx char(1)
      declare @asciikodx tinyint
      declare @pasciikodx tinyint
 
      declare @sayac1 tinyint
      declare @sayac2 tinyint
 
      declare @pkasciikodx tinyint
      declare @pbasciikodx tinyint
      declare @pkkarakterx char(1)
      declare @pbkarakterx char(1)
 
      declare @tblkarakterx table
      (
            asciikod int identity(1,1),
            karakter char(1),
            primary key(asciikod)
      )
  
      set @asciikodx=0
      while (@asciikodx<255)
       begin
               set @asciikodx=@asciikodx+1
               insert into @tblkarakterx(karakter)
                        values (char(@asciikodx))
       end
 
       declare @tblbuyukkucuken table
       (
         kascii tinyint,
         bascii tinyint,
         kkarakter char(1),
         bkarakter char(1)   
       )
 
       declare @tblbuyukkucuktr table
       (
         kascii tinyint,
         bascii tinyint,
         kkarakter char(1),
         bkarakter char(1)   
       )
 
set @sayac1=64
set @sayac2=96
while (@sayac1<90)
 begin
      set @sayac1=@sayac1+1
      set @sayac2=@sayac2+1
      set @pkasciikodx=(select asciikod from @tblkarakterx where asciikod=@sayac2)
      set @pbasciikodx=(select asciikod from @tblkarakterx where asciikod=@sayac1)
      set @pkkarakterx=(select karakter from @tblkarakterx where asciikod=@sayac2)
      set @pbkarakterx=(select karakter from @tblkarakterx where asciikod=@sayac1)
      insert into @tblbuyukkucuken values
            (@pkasciikodx,@pbasciikodx,@pkkarakterx,@pbkarakterx)
   
    if (@sayac2!=105)
     begin
         insert into @tblbuyukkucuktr values
            (@pkasciikodx,@pbasciikodx,@pkkarakterx,@pbkarakterx)
     end
end
 
insert into @tblbuyukkucuktr values (231,199,'ç','Ç')
insert into @tblbuyukkucuktr values (240,208,'g','G')
insert into @tblbuyukkucuktr values (105,221,'i','I')
insert into @tblbuyukkucuktr values (246,214,'ö','Ö')
insert into @tblbuyukkucuktr values (254,222,'s','S')
insert into @tblbuyukkucuktr values (252,220,'ü','Ü')
insert into @tblbuyukkucuktr values (253,73, 'i','I')
 
--Harfin Ascii Kodu
set @pasciikodx=ascii(@harfx)
IF (@dilx='tr')-- Türkçe ise
 BEGIN
      if (@tipx=0)-- 0 ise büyüge
       begin
        set @sonucx=(select bkarakter from @tblbuyukkucuktr where kascii=@pasciikodx)
        if (@sonucx is null) set @sonucx=@harfx
       end
            else if (@tipx=1)
       begin
        set @sonucx=(select kkarakter from @tblbuyukkucuktr where bascii=@pasciikodx)
        if (@sonucx is null) set @sonucx=@harfx
       end
END ELSE IF (@dilx='en')
 BEGIN
      if (@tipx=0)
       begin
       set @sonucx=(select bkarakter from @tblbuyukkucuken where kascii=@pasciikodx)
       if (@sonucx is null) set @sonucx=@harfx
       end
         else if (@tipx=1)
       begin
       set @sonucx=(select kkarakter from @tblbuyukkucuken where bascii=@pasciikodx)
        if (@sonucx is null) set @sonucx=@harfx
       end
 END
RETURN @sonucx
END
 

 

CREATE FUNCTION [dbo].[Cevir]
(
   @strx varchar(max)
)
RETURNS varchar(max)
AS
BEGIN
      declare @sonucx varchar(max)
      declare @harf char(1)
      declare @sayacx int
      declare @boyutx int
 
      set @sayacx=0
      set @boyutx=len(@strx)
      set @sonucx=''
      -- @sayacx ,@boyutx degerinden küçük ol(dugunda) islemleri yap
   while (@sayacx<@boyutx)
      begin -- islem blogu baslangiç
         set @sayacx=@sayacx+1
             set @harf=substring(@strx,@sayacx,1)
         if (@harf!='')
             set @sonucx=@sonucx+(select dbo.BuyukToKucukToBuyuk(@harf,0,'en'))
                  else if (@harf='')
          set @sonucx=@sonucx+' '
      end -- islem blogu bitis
     return @sonucx
END

 
Sonuç Olarak ;

select dbo.BuyukToKucukToBuyuk('a',0,'tr')
select dbo.Cevir('ali ata bak',0,'tr')
select dbo.Cevir('Isik Ilik sÜt iÇ',0,'tr')-- büyüge çevir
select dbo.Cevir('Isik Ilik sÜt iÇ',1,'tr')-- Küçüge çevir
select dbo.Cevir('UnIversty',1,'en')-- Küçüge çevir
 
----
A
 
(1 row(s) affected)
 
----------------------------------------------------------------------------------------------
ALI ATA BAK
 
(1 row(s) affected)
 
 
----------------------------------------------------------------------------------------------
ISIK ILIK SÜT IÇ
 
(1 row(s) affected)
 
 
----------------------------------------------------------------------------------------------isik ilik süt iç
 
(1 row(s) affected)

----------------------------------------------------------------------------------------------
universty
 
(1 row(s) affected)
 
 

 
En azindan fonksiyonun mantigi, algoritmasi isinize yarayabilir
Herkese Çalismalarinda Basarilar Dilerim;
Ismail Kocacan

Kategori : SQL Server | 14.10.2010 16:22:00  | 494 defa okundu  | 0 Yorum |

Yazara Ait Diğer Makaleler(51) Makaleye Yapılan Yorumlar İlk yorum yazan siz olun
Ara
 
Anket
Hangi VeriTabanı Yönetim Sistemini Kullanıyorsunuz ?