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')的东西,但这会产生溢出错误(可以理解)

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

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

相关内容

最新更新