2014-03-25 52 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))