2013-07-18 43 views
5

Tôi có một giá trị sản phẩm trường là 0.123. Đây là từ một khung nhìn và có một kiểu dữ liệu của varchar.mssql chuyển đổi varchar thành float

Tôi cần phải chuyển đổi nó thành giá trị số phẩy hoặc số để o thực hiện so sánh toán học.

chuyển đổi (float, productlength) và cast (productlength as float) cả hai đều không hoạt động.

error varchar cant be converted to float hoặc somethiing liek that.

Từ những gì tôi đã đọc varchar chỉ đơn giản là không thể được chuyển đổi thành một chuỗi số?

Bất kỳ cách thông minh nào xung quanh vấn đề này?

+0

'chọn CONVERT (float, '0,123') 'công trình. Bạn có chắc chắn không có thêm ký tự nào trong biến đó không? –

Trả lời

10

Bạn có thể chuyển đổi varchars thành phao nổi và bạn có thể thực hiện theo cách bạn đã thể hiện. VARCHAR của bạn không được là giá trị số. Phải có cái gì đó khác trong đó. Bạn có thể sử dụng IsNumeric để kiểm tra nó. Thấy điều này:

declare @thing varchar(100) 

select @thing = '122.332' 

--This returns 1 since it is numeric. 
select isnumeric(@thing) 

--This converts just fine. 
select convert(float,@thing) 

select @thing = '122.332.' 

--This returns 0 since it is not numeric. 
select isnumeric(@thing) 

--This convert throws. 
select convert(float,@thing) 
+0

Chỉ cần lưu ý rằng 'ISNUMERIC' có thể có một số [hành vi vui nhộn] (http://stackoverflow.com/questions/4522056/how-to-determine-the-field-value-which-can-not-convert-to- decimal-float-int-i/4522185 # 4522185). – Stainy

-1
DECLARE @INPUT VARCHAR(5) = '0.12',@INPUT_1 VARCHAR(5)='0.12x'; 
select CONVERT(float, @INPUT) YOUR_QUERY , 
case when isnumeric(@INPUT_1)=1 THEN CONVERT(float, @INPUT_1) ELSE 0 END AS YOUR_QUERY_ANSWERED 

trên sẽ trả về giá trị

tuy nhiên dưới đây truy vấn sẽ không làm việc

DECLARE @INPUT VARCHAR(5) = '0.12',@INPUT_1 VARCHAR(5)='0.12x'; 
select CONVERT(float, @INPUT) YOUR_QUERY , 
case when isnumeric(@INPUT_1)=1 THEN CONVERT(float, @INPUT_1) ELSE **@INPUT_1** END AS YOUR_QUERY_ANSWERED 

như @ INPUT_1 thực sự có varchar trong đó.

Vì vậy, cột đầu ra của bạn phải có một varchar trong đó.

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