我想仔细检查SQL Server中查询的逻辑。
我的想法是,我能够输入以下值,并确保结果是带有四个尾随数字的十进制。
@LABORQTY
的可能值:
1,200
1,200.42
1200 (Integer)
1200.42
1200 (As a String)
1200.42 (As a String)
当值是字符串时,将给出错误:
Error converting data type nvarchar to numeric.
这是我的代码:
CONVERT(DECIMAL(12, 4), REPLACE(@LABORQTY, ',', ''))
尽管每次输出应为十进制: 1200.4200
答案 0 :(得分:2)
您的问题确实很困惑,但是我将根据以下参数进行回答:
@laborqty是VARCHAR
@laborqty可能包含以下任意值:
'1200'
'1200.42'
'1,200'
'1,200.42'
在这种情况下,CONVERT(DECIMAL(12, 4), REPLACE(@LABORQTY, ',', ''))
实际上将产生一个小数,其精度最高为4位数字。您的查询工具/编程语言是否将其输出为1200.4200,完全是另一回事。它可能只输出1200.42并删除尾随的零
如果您仍然Error converting data type varchar to numeric.
,则数字字符串中还有一些其他字符数据(不是逗号)
如果您确实想要尾随零,请在输出之前将其格式化为字符串
FORMAT(CONVERT(decimal(12,4), '1200.42'), '0.0000')
这将生成一个带有4个尾随零的字符串
答案 1 :(得分:0)
您可以使用:
select CAST ( REPLACE( '1,200.4' , ',','') AS decimal(17,4))