我在SSIS中使用平面文件数据提供程序从外部系统导入数据。 我对该文件没有任何控制权,它每周被推送一次,然后从一个普通文件夹中提取。
CSV的前两列是日期。在整个文件过程中,日期格式已从日期更改为数字,如下所示:
Service_Date, Event_Datetime
2018-04-30,2018-04-30 21:18
43220,43220.92412
如您所见,格式从日期更改为数字。其他未在此处显示的日期列也已更改。
显然,这破坏了数据流任务。
除了进入Excel并以正确的列格式保存CSV之外,SSIS中是否还可以进行即时转换以确保工作不会失败并需要人工干预?
答案 0 :(得分:4)
这些数据值43220,43220.92412
被称为日期序列,您可以通过多种方法获取日期值:
您可以使用派生列将此列转换为float,然后转换为datetime:
(DT_DATE)(DT_R8)[dateColumn]
参考
您可以使用DateTime.FromOADAte()
函数,例如:(VB.NET中的代码)
If Row.ServiceDate_IsNull = False AndAlso String.IsnullOrEmpty(Row.ServiceDate) Then
Dim dblTemp as Double
If Double.TryParse(Row.ServiceDatemdblTemp) Then
Row.OutputDate = DateTime.FromOADate(dblTemp)
Else
Row.OutputDate = Date.Parse(Row.ServiceDatemdblTemp)
End
End If
参考
答案 1 :(得分:0)
我能够使用派生列的变体来解决问题。此表达式将捕获明显格式化为日期的列,并将其转换为日期,否则将日期序列首先转换为浮点数,然后转换为日期
FINDSTRING(Date_Service,"-",1) != 0 ? (DT_DATE)Date_Service : (DT_DATE)(DT_R8)Date_Service