我在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))
但仍无效。
有人可以为此提供帮助吗?
答案 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)))