2010-09-24 46 views
15

Tôi phải truy vấn tổng số tiền của một cột bằng cách sử dụng hàm tổng hợp. Kiểu dữ liệu cột là NVARCHAR (MAX). Làm thế nào tôi có thể chuyển đổi nó sang Integer?Truy vấn Sql để chuyển đổi nvarchar thành int

Tôi đã thử này:

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

... nhưng tôi nhận được:

chuyển đổi thất bại khi chuyển đổi giá trị nvarchar '3600.00' để kiểu dữ liệu int.

Trả lời

29

3600,00 không Integer để CAST qua phao đầu tiên

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

Edit:

Tại sao nổi?

  • không biết chính xác hoặc quy mô trên tất cả các hàng: float là ác ít có lẽ
  • chuỗi rỗng sẽ bỏ để không cho phao, không thành công trên thập phân
  • phao chấp nhận những thứ như 5E-02, không thành công trên số thập phân
+0

lý do tại sao ông lại chọn float, như trái ngược với thập phân? Tôi chỉ tò mò/cố gắng tìm hiểu :) – JNK

+0

@ JNK: bởi vì nó khoan dung hơn sau đó thập phân. Chúng tôi không có ý tưởng về độ chính xác hoặc tỷ lệ, chuỗi rỗng sẽ chuyển thành 0 cho float, float chấp nhận những thứ như 5E-02 ... – gbn

8

Ngoài câu trả lời gbn, bạn cần phải bảo vệ chống lại các trường hợp không phải số:

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

CHỌN sum (Try_Parse (số tiền như Int Sử dụng 'en-US')), chi nhánh TỪ tblproducts
WHERE id = 4 GROUP BY chi nhánh

Các vấn đề liên quan