2010-09-24 11 views
15

Muszę zapytać o całkowitą kwotę kolumny za pomocą funkcji agregującej. Typ danych kolumny to NVARCHAR (MAX). Jak mogę przekonwertować go na liczbę całkowitą?Zapytanie sql do konwertowania nvarchar na int

Próbowałem to:

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

... ale ja dostaję:

Konwersja nie powiodła się podczas konwersji wartość nvarchar '3600.00' do danych typu int.

Odpowiedz

29

3600,00 nie jest liczbą całkowitą, więc CAST poprzez pierwszy pływak

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

Edit:

Dlaczego pływaka?

  • bez pomysłu precyzji lub skali we wszystkich rzędach: pływak jest mniejszym złem może
  • pusty ciąg rzuci do zera dla pływaka, nie działa na dziesiętnych
  • pływaka akceptuje rzeczy jak 5E-02, nie na dziesiętny
+0

Dlaczego wybraliście pływaka, w przeciwieństwie na dziesiętny? Jestem po prostu ciekawa/próbuje się uczyć :) – JNK

+0

@JNK: ponieważ jest bardziej tolerancyjny niż dziesiętny. Nie mamy pojęcia precyzji ani skali, pusty ciąg będzie rzutowany na zero dla float, float akceptuje rzeczy takie jak 5E-02 ... – gbn

8

Oprócz odpowiedzi gbn jest, trzeba chronić przed przypadkach nienumerycznych:

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

SELECT sum (Try_Parse (kwota jak Int Używanie 'en-US')), oddział OD tblproducts
WHERE id = 4 GROUP BY oddziału

Powiązane problemy