我正在处理旧系统中的数据,该系统具有通用“事务”表,其中包含包含各种记录类型的数据列,以及未包含小数的位置。
例如,下一行的价格为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')
之类的东西,但这会产生溢出错误(可以理解)
答案 0 :(得分:1)
您可以轻松转换您的示例。你只需要考虑整数数学。您会注意到我除以1000.这会导致隐式转换,因此您可以获得正确的小数位数。
select cast(convert(int, '003082') / 1000. as numeric(6,3))