【问题标题】:SSIS Derived Column - Text in Numeric Field is not convertingSSIS 派生列 - 数字字段中的文本未转换
【发布时间】:2016-05-10 18:01:11
【问题描述】:

我正在将数千个 csv 文件导入 SQL 数据库。它们各有两列:日期和值。在某些文件中,值列仅包含一个句点(例如:“.”)。我尝试创建一个派生列,该列将使用以下代码处理包含句点的任何单元格:

FINDSTRING((DT_WSTR,1)[VALUE],".",1) != 0 ? NULL(DT_R8) : [VALUE]

但是,当包运行时,当它到达带有句点的单元格时会出现以下错误:

The data conversion for column "VALUE" returned status value 2 and status text 
"The value could not be converted because of a potential loss of data".

我猜我的 FINDSTRING 函数中可能缺少一个转义字符,但我似乎找不到它可能是什么。有人对我如何解决这个问题有任何想法吗?

【问题讨论】:

  • 我认为您需要在表达式之间切换位置,例如 FINDSTRING((DT_WSTR,1)[VALUE],".",1) != 0 ? [值]:NULL(DT_R8)

标签: sql-server ssis derived-column


【解决方案1】:

尝试调试这样的事情是为什么我总是提倡在数据流中添加许多派生列。调试整个表达式是不可能的。相反,首先找到句点的位置并将其添加为新列。然后你可以将它输入到三元运算中,然后你可以一点一点地添加数据查看器,以确保你看到的是你期望看到的。

就个人而言,我会采取不同的方法。您似乎希望将任何 . 列设为 DT_R8 类型的空值。

添加派生列TrimmedValue 并使用此表达式删除任何前导/尾随空格,然后

RTRIM(LTRIM(Value))

添加第二个派生列组件,这次我们将添加列MenopausalValue,因为它将删除句点。使用这个表达式

(TrimmmedValue == ".") ? Trimmedvalue : NULL(DT_WSTR, 50)

现在,您可以添加最终派生列,我们将值的字符串表示形式转换为浮点表示形式。

IsNull(MenopausalValue) ? NULL(DT_R8) : (DT_R8) MenopausalValue

如果上面显示错误,那么您需要应用以下版本,因为我不记得改变类型的三元运算的评估顺序。

(DT_R8) (IsNull(MenopausalValue) ? NULL(DT_R8) : (DT_R8) MenopausalValue)

将这些操作分解为多个步骤以进行调试的示例

【讨论】:

    【解决方案2】:

    你可以这样做:

    TRIM(Value) == "." ? NULL(DT_R8) : (DT_R8)Value
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-02
      • 1970-01-01
      • 1970-01-01
      • 2021-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-24
      相关资源
      最近更新 更多