>我正在使用来自旧系统的数据,该系统具有通用的"事务"表,其数据列包含各种记录类型,并且不包括小数。
例如,以下行的价格为 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))