此问题已解决,解决方案位于底部。
我有一个执行数据流的Azure DataFactory V2管道。
Azure Sql源表具有一个Date not null列DateReported。 这是从外部来源导入的。空值是 1899-01-01。
目标Sql表具有相同的字段DateReported,但为Date null
我在数据流中使用派生列来清理数据。 我想在日期为1899-01-01时插入空值
我的派生列函数是这个
iif(!(year(DateReported) == 1899 || year(DateReported) == 1753)
, DateReported
, null()
)
这给了我错误“表达式应该返回与先前表达式相同的类型'时间戳'”。
如果我将iif转换为此
iif((year(DateReported) == 1899 || year(DateReported) == 1753)
, null()
, DateReported
)
我收到错误消息“表达式应返回与先前表达式相同的类型'null'”
我可以像这样从源代码中在SQL中修复此问题
Select ...
DateReported2 =
CASE
WHEN DateReported is null THEN DateReported
WHEN YEAR(DateReported) = 1899 THEN NULL
ELSE DateReported
End
...
但这很混乱,因为我所有其他逻辑都在数据流中。
如何创建一个可为null的时间戳的派生列,例如C#DateTime?还是SSIS NULL(DT_DATE)?
解决方案:
case(year(DateReported) != 1899, DateReported)