SQL Server在同一条语句中一起使用Convert和Replace

时间:2019-01-23 09:26:11

标签: sql sql-server sql-convert

我想仔细检查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

2 个答案:

答案 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))