【问题标题】:Converting Quoted string to integer?将带引号的字符串转换为整数?
【发布时间】:2018-03-14 15:38:59
【问题描述】:

我有一个 SSIS 项目,其中平面文件源读取 CSV 文件。它包含一个字段 Order Item Id,格式为字符串,如“347262171”,用引号括起来。我想将其转换为数值,以便可以将其用作索引,但我尝试的一切都会给我结果:

数据转换失败。 “订单商品 ID”列的数据转换返回状态值 2 和状态文本“由于可能丢失数据,无法转换该值。”

最简单的解决方法是什么?

【问题讨论】:

  • 请不要将身份证号码转换为实际号码类型。请注意,您永远不会对 ID 号进行算术运算。例如,它只会导致前导零出现问题。
  • 另外,检查您用于新号码的列上的元数据;检查它是否足够大以容纳“数字”。在您的示例中,347262171 的 ID 是一个小字符串,但是一个很大的数字。反对“int”-ID 字段的另一点。
  • 顺便说一句,是实际源文件中的引号,还是由平面文件连接添加的?您可以禁用后者,但我不知道这是否会干扰数据流的其他部分。

标签: sql-server file ssis flat


【解决方案1】:

如果您使用的是平面文件,您可以通过指定 Text Qualifier =" 删除平面文件连接中的双引号。

Image description of where to insert Qualifier

【讨论】:

    【解决方案2】:

    您可以将派生列转换 (DCT) 添加到数据流中,在其中添加从值中删除引号的表达式:

    REPLACE( [ID FIELD], "\"", "" )
    

    其中ID FIELD 是数据中具有 ID 值的列。将此列作为新的 NVARCHAR 列添加到您的数据流中(即STRIPPED_ID_FIELD)。

    然后,添加第二个 DCT,将此值转换为数字 (DB_NUMERIC(10,0))[STRIPPED_ID_FIELD],并将其命名为 NUM_ID_FIELD

    我在第二个单独的 DCT 中这样做的原因是,您可以将错误输出添加到第二个,并将其重定向到记录集目标。然后将数据查看器添加到错误输出中,以查看哪些记录是错误的。例如,ID 字段中包含您不期望的字母。

    【讨论】:

      猜你喜欢
      • 2019-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-17
      • 1970-01-01
      • 1970-01-01
      • 2022-07-20
      • 1970-01-01
      相关资源
      最近更新 更多