SQL将带有前导零的nvarchar转换为十进制

时间:2014-11-11 02:20:16

标签: c# sql sql-server-2008 tsql

我的数字长度为6个字符,带有3个隐含小数位。一个示例数字是035000.所以这是数字35 [EDITED]。如何将其从nvarchar转换为decimal(6,3)

当我尝试CAST(col as decimal(6,3)时,我收到错误:

  

将nvarchar转换为数据类型numeric的算术溢出错误。

我也尝试使用

解析前导0
select CAST(SUBSTRING(col, patindex('%[^0]%', col), 6) as decimal(6, 3))
from my_table 

但是我收到了相同的错误消息。或者这是我应该在数据库中留下nvarchar,并转换为我的C#代码?

1 个答案:

答案 0 :(得分:7)

您无法转换' 035000'到NUMERIC(6,3),因为它有太多的数字:该数字为35000.000的数字表示,即8位数。

由于您知道您的数字在数据库中始终为6位数,因此您应首先转换为NUMERIC(6,0)(或任何其他可以容纳它的数字类型 - INTEGER将起作用,例如然后除以正确的因子将小数移位。 (你说有3个隐含小数位,但你的例子显示4 - 只需使用你需要的转换因子):

SELECT CONVERT(NUMERIC(6, 3), CONVERT(NUMERIC(6, 0), col) / 1000.0) FROM my_table