我正在执行此TSQL代码:
DECLARE @myString varchar;
SET @myString = '123.0'
SELECT CAST(@myString as decimal(25,10))
但结果我一直得到1.00000 将myString更改为'123'不会改变它。
对于我做错的任何建议都表示赞赏。
提前致谢!
答案 0 :(得分:7)
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))