1

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

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 函数中可能缺少一个转义字符,但我似乎找不到它可能是什么。有人对我如何解决这个问题有任何想法吗?

4

2 回答 2

1

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

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

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

RTRIM(LTRIM(Value))

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

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

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

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

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

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

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

于 2016-05-10T19:42:16.433 回答
0

你可以这样做:

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

在此处输入图像描述

在此处输入图像描述

于 2016-05-10T20:17:04.140 回答