SQL Server 2012中解析固定宽度字符串的更好方法?

时间:2015-04-17 15:31:06

标签: sql sql-server-2012

我正在处理旧系统中的数据,该系统具有通用“事务”表,其中包含包含各种记录类型的数据列,以及未包含小数的位置。

例如,下一行的价格为358.25,溢价为0(00.00),吨​​数为003.382,因此正确的总值为1104.1265

358250000003082-

我的T-SQL提取它是(忽略子字符串值,实际数据列比我的例子大得多)

convert(decimal(6,0), SUBSTRING(data,105,6))/1000 * (convert(decimal(5,0), SUBSTRING(data,51,5))/100 + convert(decimal(4,0), SUBSTRING(data,56,4)/100)) grossPrice

这很好用,但我需要在很多地方做这件事,如果我在错误的地方得到一个支架,它运行正常,但会得到错误的结果。

有没有更好的方法将字符串转换为隐含小数位数的小数?

我希望有类似convert(decimal(6,3), '003082')之类的东西,但这会产生溢出错误(可以理解)

1 个答案:

答案 0 :(得分:1)

您可以轻松转换您的示例。你只需要考虑整数数学。您会注意到我除以1000.这会导致隐式转换,因此您可以获得正确的小数位数。

select cast(convert(int, '003082') / 1000. as numeric(6,3))