-1

我想在 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

4

2 回答 2

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 个尾随零的字符串

于 2019-01-23T09:39:36.907 回答
0

您可以使用 :

select CAST ( REPLACE( '1,200.4' , ',','') AS decimal(17,4))
于 2019-01-23T09:39:43.057 回答