Numerik karakter almasını istediğimiz bir kolon içinde alfanumerik karakterlerin atılmış olması durumu her zaman baş ağrısına sebep olur. Veritabanını yanlış tasarlanmasından dolayı bu tür sorunlarla her zaman karşılabiliyoruz. Bu durumdada join işlemlerimizde veya metematiksel işlemlerde hata alırız.
Alfanumerik değerler bulunduran bir kolon içindeki alfanumerik karakterleri temizlemek için sql serverda bir kaç farklı method kullanabiliriz. Bu makalemizde bu örneklerden 2 tanesini paylaşacağım.
İlk olarak karakterin ascii değerini veren ASCII fonksiyonunu kullanarak bir değişkendeki alfanumerik karakerleri temizleyeceğiz.
ASCII fonksiyonu tek bir parametre alır ve içine yazılan varchar değerin ilk karakterine ait ASCII değeri verir. A-Z arasındaki ascii değerlerin dışında kalan karakterleri temizlediğimiz zaman değeri sadece numerik karakterlerden oluşmuş hale getireceğiz.
Alfanumerik değerleri ASCII fonksiyonunu kullanarak temizleme:
declare @metin varchar(100)
set @metin = 'Yaz1234Mut987'
declare @uzunluk int= len(@metin)
declare @i int=1
declare @temizMetin varchar(max)
set @temizMetin = '' --yeni degeri atayacağımız metin
while @i<=@uzunluk
begin
if ASCII(SUBSTRING(@metin,@i,1))>=48 and ASCII(SUBSTRING(@metin,@i,1))<=57
--48 ile 57 arasında ascii değeri olan karakterler 0-9 aralığıdır.
begin
set @temizMetin=@temizMetin+SUBSTRING(@metin,@i,1)
-- 0-9 arasındaki değerleri sırası ile yeni metne ekliyoruz.
--böylece 0-9 arasında olmayan karakterleri almamış oluyoruz.
end
set @i=@i+1
end
print @temizMetin
Yukarıdaki sogu sonucunda 'Yaz1234Mut987' olarak verilen string değer '1234987' olarak çıkar. Böylece alfanumerik karakterleri temizlemik olduk.