Metin içindeki belli bir karakteri veya metin parçasini baska bir karakter veya metin ile degistirmek

                 Veritabanindaki kayitlarla ugrasirken bazi kolonlardaki text bilgiler içerisinde istemedigimiz karakterler yer alir. Eger veri girisi yapilan ekranlarda kontroller dogru yapilmadi ise kullanicilar yanlis kararkterler girebilirler. Mesela Ad kolonunda Sabri1 diye bir kayit görebiliriz. Bunun disinda ise iki sistem arasinda veri aktarimi yaparken eski sistemden gelen kirli text verilerini temizlemek isteriz. Bu tür durumlarda istenmeyen karakterleri temizlemek için t-sql  de replace fonksiyonunu kullanariz.

Ilk olarak replace fonksiyonunun basit olarak kullanimi su sekildedir.

REPLACE (text_ifade,degistirilecek_text,ne_ile_degistirilecek)

 

–Örnek

select replace(‘www.yazilimmutfagi.com’,‘www’,‘http://www’)

Sonuç : http://www.yazilimmutfagi.com

 

Görüldügü gibi www ifadesini hhtp://www olarak degistirmis olduk.

Simdi ise replace fonksiyonunu kullanarak bir cümledeki türkçe karakterleri temizleyelim.

DECLARE @Text varchar(max) = ‘yazilim mutfagi. t-sql replace fonksiyonu kullanim örnegi. öçigüs’

SELECT REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(

@Text,‘g’,‘g’),‘ü’,‘u’),‘i’,‘i’),‘s’,‘s’),‘ö’,‘o’),‘ç’,‘c’)

 

Sonuç : yazilim mutfagi. t-sql replace fonksiyonu kullanim ornegi. ocigus

 

Yukaridaki örnekde iç içe replace fonksiyonunu kullanarak türkçe karakterleri ingilizce karakterle degistirdik.

Simdi ise replace fonksiyonunu patindex beraber ile kullanarak bir text içinde bizim istemedigimiz tüm karakterleri silelim.
.

 

declare @Metin NVARCHAR(MAX)

declare @GecerliKarakterler   NVARCHAR(512)

 

set @Metin = ‘Mehmet Sabri *KUNT -185863’

set @GecerliKarakterler = ‘abcdefghijklmnopqrstuvwxyz’

 

DECLARE @Patern NVARCHAR(1024) = ‘%[^’ + @GecerliKarakterler + ‘]%’

 

WHILE PATINDEX(@Patern,@Metin) >= 1

   SET @Metin = REPLACE(@Metin,Substring(@Metin,PATINDEX(@Patern,@Metin), 1),)

print @Metin

 

Sonuç : MehmetSabriKUNT

 

Yukaridaki Örnekte kendimiz bir karkater listesi olusturduk ve metin içinde bulunana karakterlerden bizim kümemizde bulunmayanlari temizledik. @GecerliKarakterler kümesini ihtiyaçlarimiza göre degistirebiliriz.  Pathindex konusunuda baska bir makalede anlatmayi düsünüyorum.
.

12 thoughts on “Metin içindeki belli bir karakteri veya metin parçasini baska bir karakter veya metin ile degistirmek

  1. Merhaba, replace komutu türkçe karakterleri çevirirken olmasi gerektigi gibi düzgün çalisiyor fakat büyük küçük ayrimini yapmiyor, buldugu büyükse yerine büyügünü yaziyor, buldugu küçükse yerine küçügünü yaziyor.

    Bu durumda replace komutunun içinde mesela sadece küçük “ç” harfini sadece küçük “c”ye çevirmek istedigimizde degerlendirmeye büyük “Ç”leri de katiyor. bu durumu nasil asabiliriz?

  2.  Suat Cezik, 

    Select * from ilce

    where il = ‘comboboxta seçilen il’

    seklinde bunu saglayabilirsin.

  3. Merhaba

    sql server ile bagli comboboxlari süzme islemine tabi tutma komutu varmi?

    örnegin ; 1.comboboxda bulanan illerden yapilan seçimle 2. comboboxda sadece seçilen ilin ilçelerini gösterme…

  4. hehe :)) Ado.Net ‘ i ögrenmeye ilk basladigim günlerdeki çok sik karisikliga yol açan su index olayi .d neyseki alistik sonradan 🙂

  5. evet ihsan aynen dedigin gibi. sen programlamaci olarak 1 dönmesini beliyorsun degilmi. sqlde indexler 0 dan degil 1 den baslar. sabri dede 2. harf a oldugu için sonuç 2 döner.

  6.  msk: "select patindex(‘%a%’,’sabri’)
    sorgusunun sonucu 2 dir."

     

    peki neden iki dönüyor?

    Sorguda, "Sabir’nin içindeki ‘a’ harfini aratmiyor musun?" 

  7. hepsi çalisiyor hasan bir yanlisin var. ama sende setle atama yapinca çalisiyorsa o ayri. sql versiyonun nedir. 

  8. merhaba ihsan, insallah bu aralar birz vakit ayiracam siteye 🙂 patindex verilen patternin text içindeki indexini verir.

    örnegin sabri içinde a harfini patindexle ararsan sana 2 döner. 

    yani

    select patindex(‘%a%’,’sabri’)

    sorgusunun sonucu 2 dir. Ins yakinda patindex için bir makale yazacagim

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir