2014-03-25 212 views
1

我執行這個TSQL代碼:CAST始終返回1

DECLARE @myString varchar; 
SET @myString = '123.0' 
SELECT CAST(@myString as decimal(25,10)) 

但我一直得到1.00000作爲變化的myString到「123」的結果 不會改變這一點。

任何意見我做錯了讚賞。

在此先感謝!

回答

7

總是在MySQL中使用varchar()(及相關類型)時使用長度。在此上下文中默認爲1。因此,這解決您的問題:

DECLARE @myString varchar(255); 
SET @myString = '123.0'; 
SELECT CAST(@myString as decimal(25,10)); 

你得到1,因爲你的代碼被解釋爲

DECLARE @myString varchar(1); 
SET @myString = '123.0'; 
SELECT CAST(@myString as decimal(25,10)); 

documentation不避諱這一點:

如果沒有指定n在數據定義或變量聲明 聲明中,缺省長度爲1.當使用 時未指定n時,CAST和CONVER牛逼的功能,默認長度爲30

2

你缺少的VARCHAR declareation

DECLARE @myString varchar(10); 
SET @myString = '123.0' 
SELECT CAST(@myString as decimal(25,10))