我觉得这很有挑战性。我有源表和目标表。
源表具有char数据类型的长度为2的列之一。目标表具有int数据类型的列之一。
任务是使用SSIS包将数据从源迁移到目标。在那个过程中,我使用派生列变换来处理这种转换。
Source表中的列的值为“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 )
这不起作用。
如果有出路,我很欣赏这里的任何方向。
由于Integer DT_I4
类型的目标列,因此您应该在派生列中使用以下表达式:
(DT_I4)[SourceColumn]
还要检查Null
s和Empty字符串:
ISNULL([SourceColumn]) ? NULL(DT_I4): ([SourceColumn] == "" ? NULL(DT_I4): (DT_I4)[SourceColumn])
您是否尝试过直接连接源列和目标列而不使用数据转换或派生列转换?我认为如果源表中的所有数据都是数字,它应该隐式地从char转换为Integer,尽管数据类型是char。