2010-09-24 27 views
15

Toplam bir sütun işlevi için bir toplam işlevini kullanarak sorgulamak zorundayım. Sütun veri türü NVARCHAR'dır (MAX). Tamsayıya nasıl dönüştürebilirim?Sql nvarchar int int dönüşümü dönüştürmek

SELECT SUM(CAST(amount AS INT)), 
     branch 
    FROM tblproducts 
    WHERE id = 4 
GROUP BY branch 

... ama alıyorum:

Bunu denedim veri türü int nvarchar değeri '3600.00' dönüştürürken

Dönüşüm başarısız oldu.

Neden yüzer:

cevap

29

3600,00 yüzden

sum(CAST(CAST(amount AS float) AS INT)) 

Düzenleme birinci şamandıra vasıtasıyla CAST tamsayı değil?

  • tüm satırlar arasında duyarlık veya ölçek hiçbir fikri: şamandıra, belki
  • boş dize şamandıra için sıfıra kullanacaklar kötünün olan ondalık
  • şamandıra üzerinde başarısız 5E-02 gibi şeyleri kabul eder üzerinde başarısız GBN cevabı ek olarak
+0

neden şamandıra tercih ettiniz tblproducts
GELEN şube ? Sadece merak ediyorum/öğrenmeye çalışıyorum :) – JNK

+0

@JNK: çünkü ondalık daha toleranslı. Kesinlik ya da ölçek hakkında hiçbir fikrimiz yok, boş dize kayan için sıfır olacak, şamandıra 5E-02 gibi şeyler kabul ediyor ... – gbn

8

ondalık, sen sayısal olmayan durumlarda karşı koruma gerekir:

sum(CASE WHEN ISNUMERIC(Amount)=1 THEN CAST(CAST(amount AS float) AS INT)END) 
0

SEÇ toplamı onluya aksine (Int olarak Try_Parse (miktarı 'en-US') kullanma), id = 4 GRUP dalı TARAFINDAN