Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server CSV文件格式更改_Sql Server_Excel_Csv_Ssis_Etl - Fatal编程技术网

Sql server CSV文件格式更改

Sql server CSV文件格式更改,sql-server,excel,csv,ssis,etl,Sql Server,Excel,Csv,Ssis,Etl,我正在SSIS中使用平面文件数据提供程序从外部系统导入数据我对该文件没有任何控制权,它每周推出一次,我从一个公用文件夹中取出 CSV的前两列是日期。在文件中,日期格式已从日期更改为数字,如下所示: Service_Date, Event_Datetime 2018-04-30,2018-04-30 21:18 43220,43220.92412 如您所见,格式从日期更改为数字。此处未显示的其他日期列也已更改 显然,这破坏了数据流任务 除了进入Excel并使用正确的列格式保存CSV外,SSIS中

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

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

Service_Date, Event_Datetime
2018-04-30,2018-04-30 21:18
43220,43220.92412
如您所见,格式从日期更改为数字。此处未显示的其他日期列也已更改

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


除了进入Excel并使用正确的列格式保存CSV外,SSIS中是否有任何方法可以动态转换,以便作业不会失败并需要手动干预?

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

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

(DT_DATE)(DT_R8)[dateColumn]
参考资料

(2) 使用脚本组件 您可以使用
DateTime.FromOADAte()
函数,例如:(VB.NET中的代码)

参考


我能够使用衍生列的变体来解决这个问题。此表达式将捕获显然格式为日期的列,并将其转换为日期,否则它将首先将日期序列转换为浮点,然后再转换为日期

FINDSTRING(Date_Service,"-",1) != 0 ? (DT_DATE)Date_Service : (DT_DATE)(DT_R8)Date_Service

编写一个UDF来完成它。识别明显的Excel日期并进行转换,识别已知的文本格式并进行转换,使用转换和TRY_PARSE转换所有其他内容。如果提供的答案解决了问题,或者您同意,为什么要忽略它?您必须对其投赞成票或接受它,否则您应该留下评论,以便与回答者详细说明
FINDSTRING(Date_Service,"-",1) != 0 ? (DT_DATE)Date_Service : (DT_DATE)(DT_R8)Date_Service