SSIS派生列表达式

时间:2015-07-16 23:24:43

标签: sql ssis

我在SSIS中有时间戳的下面派生表达式

(DT_DBTIME)(SUBSTRING([Column 11],1,2) + ":" + SUBSTRING([Column 11],3,2) + ":" + SUBSTRING([Column 11],5,2)) 

但它没有采用空值,所以我尝试了这个

ISNULL ( [Column 11] ) ? "000000" : (DT_DBTIME)(SUBSTRING([Column 11],1,2) + ":" + SUBSTRING([Column 11],3,2) + ":" + SUBSTRING([Column 11],5,2)) 

但仍无效。

有人可以为此提供帮助吗?

1 个答案:

答案 0 :(得分:0)

您在问题中发布的错误有点误导。

SSDT中产生的实际错误是:

  

数据类型“DT_WSTR”和“DT_DBTIME”与之不兼容   条件运算符。操作数类型不能隐式转换为   条件操作的兼容类型。执行此操作   在操作中,需要使用强制转换显式地转换一个或两个操作数   操作

当然是你最后发布的那个:

  

数据流任务错误[派生列[18]]:计算   表达式“(ISNULL([第0列])?”000000“:( DT_DBTIME)   (SUBSTRING([第0栏],1,2)+“:”+ SUBSTRING([第0栏],第3,2)+“:”+   SUBSTRING([第0列],5,2)))“失败,错误代码为0xC00470A0   表达式可能有错误,例如除以零,这是不可能的   在分析时检测到,或者可能存在内存不足错误。

在您的情况下,这只是意味着您无法将(DT_DBTIME)定义为条件操作的一部分,

其他部分

  

:( DT_DBTIME)(SUBSTRING([第11栏],1,2)+“:”+ SUBSTRING([专栏]   11],3,2)+“:”+ SUBSTRING([第11栏],5,2))

将其他部分留作“DT_WSTR”

IF部分

  

ISNULL([第11栏])? “000000”

所以正确的转换规则应该是:

  

(DT_DBTIME)(IS([第11栏])?“000000”:( SUBSTRING([第11栏],1,2)   +“:”+ SUBSTRING([第11栏],3,2)+“:”+ SUBSTRING([第11栏],5,2)))