Sql 服务器在同一语句中同时使用转换和替换

Sql Server using Convert and Replace together in the same statement

我想仔细检查 SQL 服务器中查询的逻辑。

我的想法是我能够提供以下值,它会确保结果是一个带有四位尾随数字的小数。

@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

你的问题很迷茫,我会按照以下参数来回答:

@laborqty 是 VARCHAR

@laborqty 可能会以某种方式包含以下任何值:

'1200'
'1200.42'
'1,200'
'1,200.42'

在这种情况下 CONVERT(DECIMAL(12, 4), REPLACE(@LABORQTY, ',', '')) 确实会产生一个小数精度最多为 4 位的小数。您的查询 tool/programming 语言是否将其输出为 1200.4200 完全是另一回事;它很可能只输出 1200.42 并删除尾随零

如果您仍然得到 Error converting data type varchar to numeric.,则您的数字字符串中还有一些其他字符数据(不是逗号)

如果您确实需要尾随零,请在输出前将其格式化为字符串

FORMAT(CONVERT(decimal(12,4), '1200.42'), '0.0000')

这将生成一个带有 4 个尾随零的字符串

您可以使用:

select CAST ( REPLACE( '1,200.4' , ',','') AS decimal(17,4))