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