CAST始终返回1

时间:2014-03-25 12:29:03

标签: sql sql-server tsql

我正在执行此TSQL代码:

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

但结果我一直得到1.00000 将myString更改为'123'不会改变它。

对于我做错的任何建议都表示赞赏。

提前致谢!

2 个答案:

答案 0 :(得分: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和CONVERT函数,默认长度为30。

答案 1 :(得分:2)

您缺少varchar声明

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