SSIS处理货币字段,看起来像是在最后一位数字上的符号

时间:2017-11-06 19:31:41

标签: ssis

我有一个固定长度的平面文件输入文件。记录看起来像这样

40000003858172870114823 0010087192017092762756014202METFORMIN HCL ER 500 MG 0000001200000300900000093E00000009E00000000 {0000001 {00000104 {JOHN DOE 196907161423171289 2174558M2A2 000 XXXX YYYYY千亿000020170915001 00010000300 000003zzzzzz 000 {000000000 {000000894 {aaaaaaaaaaaaaaa P2017092700000000 {00000000 {00000000 {00000000 {0000000 {00000 {F89863 682004R0900001011B2017101109656 500 MG 20170101亿{88044828665760

如果你在JOHN DOE之前看,你会看到一个代表金钱领域的领域。它看起来像00000104 {。

这看起来像我多年前从大型机处理的字段类型。我如何在SSIS中处理这个问题。如果{最后实际上是0,那么我希望该字段是一个读取0000010.40的字符串。

我有其他的金钱领域,例如00000159E。如果我的记忆正确地为我服务,那将是00000015.95。

我找不到有关如何进行此转换的任何内容。

谢谢,

迪克罗森伯格

2 个答案:

答案 0 :(得分:0)

我认为您需要在数据流中使用脚本组件源,或使用派生列转换或脚本组件转换。我建议使用脚本组件,因为听起来你的自定义逻辑会相当复杂。

我已经写了一些关于如何实现脚本组件源的详细解答:

SSIS import a Flat File to SQL with the first row as header and last row as a total

How can I load in a pipe (|) delimited text file that has columns that sometimes contain line breaks?

基本上,您需要找到字符串,例如" 00000104 {",然后在将其添加到数据流之前将其转换为十进制/货币形式(或者如果您在&#39期间将其转换为;重新使用派生列转换。)

这也可以在脚本组件转换中完成,它将以类似于派生列转换的方式运行,只有你可能有更复杂逻辑的范围。同样在脚本组件转换中(与源相反),您已经从平面文件源中获得了所有其他字段。

答案 1 :(得分:0)

  1. 将值导入为字符串
  2. 00000159E 00000104 {

      派生列中的
    1. 使用replace:
    2. 进行转换

      替换(更换(COL, “E”, “5”), “{”, “0”)

      1. 在另一个衍生的专栏中投入金钱并除以100
      2. (DT_CY)(drvCol)/ 100