CSV档案格式变更

时间:2019-02-21 22:21:55

标签: sql-server excel csv date ssis

我在SSIS中使用平面文件数据提供程序从外部系统导入数据。 我对该文件没有任何控制权,它每周被推送一次,然后从一个普通文件夹中提取。

CSV的前两列是日期。在整个文件过程中,日期格式已从日期更改为数字,如下所示:

Service_Date, Event_Datetime
2018-04-30,2018-04-30 21:18
43220,43220.92412

如您所见,格式从日期更改为数字。其他未在此处显示的日期列也已更改。

显然,这破坏了数据流任务。

除了进入Excel并以正确的列格式保存CSV之外,SSIS中是否还可以进行即时转换以确保工作不会失败并需要人工干预?

2 个答案:

答案 0 :(得分:4)

这些数据值43220,43220.92412被称为日期序列,您可以通过多种方法获取日期值:

(1)使用派生列

您可以使用派生列将此列转换为float,然后转换为datetime:

(DT_DATE)(DT_R8)[dateColumn]

参考

(2)使用脚本组件

您可以使用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