SQL: NvarChar – Float Problemi
Belki sizin de başınıza gelmiştir.
Daha önceden Nvarchar olarak tanımlanmış bir veritabanı alanında ondalıklı toplama işlemi yapmak istediğinizde sistem size izin vermez ve hoop kardeşim! Nvarchar alanı FLOAT alana yada decimal alana dönüştürülemez diyebilir.
İşte morallerin biraz olsun bozulduğu bu anlarda hemen alternatif çözüm arayışına gireriz.
İşte çözüm:
select
sum(cast(hisse as money)) toplamhisse,
sum(cast(pay as money)) toplampay,
sum(cast(sermaye as money)) toplamsermaye
gördüğünüz gibi money alan tanımı da ondalıklı yapıya sahiptir ve nvarchar alanından dönüşümde kullanılabilir.
Kolay gelsin.
bu işi program içinde dönüştürmek daha kolay değil mi. mesela delphi de strtofloat(string) gibi
veri miktarının binlerce olduğunu düşün ve alanların toplamını aldırmaya çalış, bak bakalım hangisi daha hızlı…
hız bakımından demedim ki zaten. daha kolay olur dedim.
bu işi program içinde dönüştürmek daha kolay değil mi. mesela delphi de strtofloat(string) gibi
mevcut SQLselectsum(cast(hisse as money)) toplamhisse,sum(cast(pay as money)) toplampay,sum(cast(sermaye as money)) toplamsermayeşeklindeydi, bunun için delphide kaç satır kod yazman lazım.. dediğin fonksiyonla kullanabilmek için??
delphide bunun için 5 satırı geçmez. delphide query componentine fazladan calculated alan eklenecek. adı hissehesaplanan olsun ve currency veri tipi olsun.yine aynı query nin oncalculate event ına adoquery1.fields.fieldbyname('hissehesaplanan').ascurrency:=strtofloat(adoquery1.fields.fieldbyname('toplamhisse').asstring);şeklinde bi satır kod yazılacak.
mevcut SQLselectsum(cast(hisse as money)) toplamhisse,sum(cast(pay as money)) toplampay,sum(cast(sermaye as money)) toplamsermayeşeklindeydi, bunun için delphide kaç satır kod yazman lazım.. dediğin fonksiyonla kullanabilmek için??
delphide bunun için 5 satırı geçmez. delphide query componentine fazladan calculated alan eklenecek. adı hissehesaplanan olsun ve currency veri tipi olsun.yine aynı query nin oncalculate event ına adoquery1.fields.fieldbyname('hissehesaplanan').ascurrency:=strtofloat(adoquery1.fields.fieldbyname('toplamhisse').asstring);şeklinde bi satır kod yazılacak.