4

我觉得这有点挑战性。我有源表和目标表。

源表具有长度为 2 的 char 数据类型的列之一。目标表具有 int 数据类型的列之一。

任务是使用 SSIS 包将数据从源迁移到目标。在那个过程中,我使用派生列转换来处理这种转换。

源表中的列的值为“01”或“02”或“03”。而具有 int 数据类型的目标列不能与源列映射。因为 int 只识别“1”。我只想要 1 或 2 或 3 并在目标列中省略 0。

我尝试了以下几件事。

尝试#1:

SUBSTRING(COLNAME, 2, 1)

这给了我“01”中的“1”但是当我这样做时

(DT_R4) SUBSTRING(COLNAME, 2, 1 )

它彻底让我失望了。

尝试#2:

我尝试像下面一样投射。

(DT_DECIMAL, 2)(DT_R4) SUBSTRING(COLNAME, 2, 1 )

那也没有用。

如果有出路,我很感激这里的任何方向。

4

2 回答 2

3

由于 Integer 类型的目标列,DT_I4因此您应该在派生列中使用以下表达式:

(DT_I4)[SourceColumn]

还要检查Nulls 和空字符串:

ISNULL([SourceColumn]) ? NULL(DT_I4): ([SourceColumn] == "" ? NULL(DT_I4): (DT_I4)[SourceColumn])
于 2019-03-20T21:40:30.273 回答
1

您是否尝试过不使用数据转换或派生列转换直接连接源列和目标列?我认为如果源表中的所有数据都是数字,尽管数据类型是 char,它应该隐式地从 char 转换为 Integer。

于 2019-03-20T23:58:51.077 回答