Sql server 我们可以在SSIS中从字符串或字符数据类型转换为int(或numeric)吗
我觉得这有点挑战性。我有源表和目标表 源表中有一列的char数据类型长度为2。 目标表中有一列的数据类型为int 任务是使用SSIS包将数据从源迁移到目标。在这个过程中,我使用派生列转换来处理这个转换 源表中的列的值为“01”或“02”或“03”。而具有int数据类型的目标列无法与源列映射。因为int只识别“1”我只想要1、2或3,并在目标列中省略0。 我试过以下几种方法 试试看#1:Sql server 我们可以在SSIS中从字符串或字符数据类型转换为int(或numeric)吗,sql-server,ssis,casting,etl,derived-column,Sql Server,Ssis,Casting,Etl,Derived Column,我觉得这有点挑战性。我有源表和目标表 源表中有一列的char数据类型长度为2。 目标表中有一列的数据类型为int 任务是使用SSIS包将数据从源迁移到目标。在这个过程中,我使用派生列转换来处理这个转换 源表中的列的值为“01”或“02”或“03”。而具有int数据类型的目标列无法与源列映射。因为int只识别“1”我只想要1、2或3,并在目标列中省略0。 我试过以下几种方法 试试看#1: SUBSTRING(COLNAME, 2, 1) 这给了我“01”中的“1”,但当我 (DT_R4) SUB
SUBSTRING(COLNAME, 2, 1)
这给了我“01”中的“1”,但当我
(DT_R4) SUBSTRING(COLNAME, 2, 1 )
我彻底失败了
试试看#2:
SUBSTRING(COLNAME, 2, 1)
我试着像下面这样投
(DT_DECIMAL, 2)(DT_R4) SUBSTRING(COLNAME, 2, 1 )
这也不管用
如果有出路,我很欣赏这里的任何方向。由于中的目标列的类型为Integer
DT_I4
,因此您应该在派生列中使用以下表达式:
(DT_I4)[SourceColumn]
还要检查Null
s和空字符串:
ISNULL([SourceColumn]) ? NULL(DT_I4): ([SourceColumn] == "" ? NULL(DT_I4): (DT_I4)[SourceColumn])
您是否尝试过在不使用数据转换或派生列转换的情况下直接连接源列和目标列?我认为,如果源表中的所有数据都是数字,那么它应该隐式地从char转换为整数,尽管数据类型是char。那么
(DT_DECIMAL,2)COLNAME
呢?我目前还没有访问SSIS的权限,但我很有信心它会对此感到满意。如果您需要它作为实数,而不是小数,那么请执行(DT_R4)((DT_decimal,2)COLNAME)
@Larnu为什么不(DT_I4)
,问题也可能是由一些空值或空值引起的。我感谢您在@Larnu这里的提示。由于我真的打算转换为整数数据类型,您的第二个问题使我更接近于解决。向上投票。和@Hadi,感谢您分享扩展解决方案。当源列具有NULL
值时,这非常适合我的场景。是的,因为目标类型是整数,所以最好使用(DT_I4)
强制转换,如果源列包含空字符串(!=NULL),那么它将抛出异常。这是完全可行的,并且符合要求的场景。这是完美的解决方案。投票结果也是一样。