Oca
28
2013

MSSQL Nvarchar to Decimal Convert Fonksiyonu

MS SQLBir program yazımına başlanıldığında nedendir bilinmez ama işin en önemli kısmı olan veritabanı planlama ve tasarım aşamaları hep unutulur yada “aman sen de…” diyerek tüm kolonlar nvarchar yada benzer string yapılarda tanımlanır.

Program bu şekilde elbet çalışacaktır, fakat yazılımın performansı son derece düşecektir. Şöyle ki;

Elimizde 1 milyon satırı olan bir tablomuz olsun ve yapılmak istenen şey belirli tarih aralığındaki satışların toplam ve ortalama değerlerini hesaplamak olsun.

 

 

 

Hatalı tasarlanmış bir veri tabanında bu durumda yapılacak en iyi şey tüm yükü yazılıma bırakarak

  1. önce tüm veritabanını sorgulamak,
  2. text olarak tanımlı tarih alanlarını belleğe alıp convert etmek
  3. bu tarih alanlarına göre satış rakamlarını belleğe almak
  4. ve toplam satış ve ortalama satış değerlerini hesaplamak için bir ton convert ve matematiksel işlemleri yapmak olacaktır.

Peki performans bu işin neresinde? tabi ki hiç bir yerinde yok. Hele de sürekli işlem yapılan bir sunucuda bu işi çevireceksek işlemi başlattığımız andan itibaren 1-2 bardak çay içecek zamanımız olacağı kesindir.

Eğer tablomuz düzgün tasarlanmış olsaydı, o zaman ne yapardık?

 

 

sonra da bu sorgudan dönen toplamsatis ve ortalamasatis bilgilerimizi programda istediğimiz gibi kullanabiliriz.

İyi ama ya veri tabanını başkası tasarlamış ve binlerce satır satış rakamını decimal olarak convert yapma işi (hamallığı) bize kalmışsa, işte bu kötü bir durumdur.

Çünkü hatalı veri girişinden sebep text alanlara gereğinden fazla nokta konulmuş da olabilir. Bu durumda normal bir replace yada cast işlemi işimizi görmez. Çünkü decimal alanın ayraç bilgisi (,) işaretidir.

Bu işlemi yapabilmek için bir fonksiyon yazdım. Bu fonksiyon ile nvarchar alanda tanımlanmış hatalı noktalama yapısı düzgün bir noktalama yapısına çevriliyor.

 

bu fonksiyonu test etmek istersek;

select dbo.fn_nchar2decimal(‘1243.4234.234.423.4234.31’) as sonuc şeklinde basitçe kullanabiliriz.

nvarchar2decimal

görüldüğü üzere hatalı kolon bilgisinde ne kadar nokta olursa olsun 1 den fazla nokta varsa en sağdakini her zaman ondalık/kuruş olarak tanımlamaktadır.

Bu fonksiyonu UPDATE cümleciğinde kullanarak ALTER COLUMN öncesinde verilerin güncellenmesini de sağlayabiliriz.

 

 

sonrasında da ister kolonu decimal yapın ya da money artık rahatça dönüşüm yapılabilir.

Kolay gelsin.

 

TeamViewer ile İnternet üzerinden Uzaktan Erişim ve Destek Sekercioglu.eu Uzaktan Yardım
Ammyy Uzaktan Yardım
WinRAR
WEBMAIL Google PageRank Checker
Twitterda Takip Edin! Twitterda Takip Edin!
Twitter

Üye Paneli

Son Yazılar

Kategoriler

Son Yorumlar