我有定界的文本文件,正在将其加载到数据库表中 如何将DT_STR col加载到DT_DBDATE,将DT_STR加载到DT_DATETIME。
在文本文件中
COL1 : Predicted delivery date : DT_STR
COL2 : ScanDateTime : DT_STR
在目标表中:
COL1 : Predicted delivery date : DATE (DataType)
COL2 : ScanDateTime : DATETIME
我需要以以下格式加载数据
Switchoffset (Substring(ScanDateTime , 1, 22)+':'+Substring(ScanDateTime , 23, 24),'-05:00')
我试图使用Derived列将此数据加载到目标表中:
我用
表示COL 1:
(DT_DBDATE)LEFT([Predicted Delivery Date],10)
COL 2:
(DT_DATE)(SUBSTRING([ScanDateTime ],1,4) + "-" + SUBSTRING([ScanDateTime ],5,2) + "-" + SUBSTRING([ScanDateTime ],7,2),'-05:00')
但是两者都给出了错误:
[派生列2]错误:尝试执行错误操作时发生错误 执行类型转换。 [派生列2]错误:SSIS错误代码 DTS_E_INDUCEDTRANSFORMFAILUREONERROR。 “派生列”失败 因为发生错误代码0xC0049064,并且错误行的配置 关于“派生的Column.Outputs [派生的列输出] .Columns [预测的”” 指定错误失败。指定的对象发生错误 指定组件的。之前可能发布了错误消息 并提供有关失败的更多信息。
对于Col1,我该如何处理Null值并将数据加载到“日期格式”的“目标”表中?
对于Col2,我如何为Switchoffset
(exp)写一个表达式-该日期时间列和加载时间为5小时?
答案 0 :(得分:2)
您可以添加具有以下表达式的派生列:
(ISNULL([Predicted delivery date]) || [Predicted delivery date] == "") ?
NULL(DT_DATE) :
(DT_DATE)[Predicted delivery date]
您可以通过添加脚本组件转换,选择ScanDateTime作为输入列并添加名为DT_DBDATETIMEOFFSET
的类型为outDate
的新列来解决该问题,该脚本内部使用以下代码:
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
if (!Row.ScanDateTime_IsNull && !String.IsNullOrEmpty(Row.ScanDateTime)){
DateTime dtDate = DateTime.Parse(Row.ScanDateTime);
dtDate = DateTime.SpecifyKind(dtDate, DateTimeKind.Unspecified);
DateTimeOffset offDate = new DateTimeOffset(dtDate,
TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time").GetUtcOffset(dtDate));
Row.outDate = offDate;
}else{
Row.outDate_IsNull = True;
}
}