我需要将一个类似00000000001099
的数字与0.01
相乘,然后在SSIS包中的派生列中乘法后转换为两个小数位,例如10.99
。< / p>
现在我正在使用这些表达式(dt_numeric,2,2)((DT_CY)((dt_wstr,14)PRICE) * 0.01)
,但它失败了。
我在转换后从平面文件中获取值00000000001099
的列价格我需要再次将值放回平面文件。
答案 0 :(得分:1)
由于你的字符串是14长,你不能使用DT_I4 - 它只是弄清楚这是非常错误的,并给你关于潜在的数据丢失的错误。您可以编辑错误并忽略可能的截断,但更好的方法是使用可以保存数字的数据类型
你的推导应该是这样的:
(DT_NUMERIC,X,2)((DT_NUMERIC,X+2,2)([InputColumn]))*0.01)
在你的例子中
(DT_NUMERIC,14,2)(((DT_NUMERIC,16,2)([PRICE]))*0.01)
通过使用x + 2,2的额外步骤,您可以将99999999999999保存到数字中,然后除以100(或乘以0.01)并转换回最小可能的数字(x,2) - 您可能想要使用更大的标准化数字类型 - 查看MSDN / BOL以查看每个类型的存储要求,并选择与您的要求具有相同字节数的最大类型。
答案 1 :(得分:0)
这应该有用......
(DT_DECIMAL, 2 )(DT_WSTR, 20 )((DT_I4)@[User::Cost] * 0.01)
答案 2 :(得分:0)
虽然值00000000001099是一个数字,但它不能以数字数据类型的方式表示。前导零将被剥离。因为您以这种方式显示此数字,所以我必须假设该数字存储在字符串数据类型中。在派生列之前的数据流中,我建议使用“数据转换”组件。将字符串转换为数字类型。在下游派生列组件中,执行数学乘法运算以将小数点放在正确的位置。