从SSIS中的excel文件中读取日期。 SSIS读取其他格式的日期

时间:2019-10-18 20:13:56

标签: c# .net excel ssis

一个excel文件的所有日期都格式化为MM / dd / yy,我通过c#脚本在SSIS中读取了它,但是在遍历记录时,我注意到某些日期被读为dd / MM / yy。 Excel或SSIS以某种方式弄乱了日期格式。由于某些日期已正确格式化为MM / dd / yy,因此我无法找出哪些日期已正确格式化以及哪些日期未正确格式化。有没有一种方法可以确保以特定的日期格式读取Excel工作表?

我尝试将连接字符串中IMEX的配置更改为1。 还尝试在代码中标识日期,但这是不可能的,因为01-02-2019可能是1月2日或2月1日。

我正在使用的连接字符串如下所示:

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Path + ";Extended Properties=" + "\"" + "EXCEL 12.0 XML; HDR=NO; IMEX=1" + "\"";

我在脚本中打开excel文件并循环浏览各行。

excel的日期如下:

  • 01/31/19
  • 19/02/01
  • 08/19/19
  • 19/06/07

当我在SSIS中阅读它时,会得到以下结果:

  • 01/31/19
  • 02/01/19
  • 19/08/19
  • 06/07/19

对于某些行,您可以看到日期格式更改。

有没有办法确保所有读取日期的格式?

1 个答案:

答案 0 :(得分:0)

Excel主要是罪魁祸首。它在SSIS上强制使用自己的数据类型。如果您可以将该列转换为文本,那将是一个不错的开始。 (但大多数情况下是用户输入正确的吗?所以可能不是)

问题可能是,如果计算机(服务器/用户)上的“区域设置”不同,则格式将与Excel受到区域设置驱动的方式不同。 (但如果它们都在同一台机器上,则没有太大的意义)

我看到的第二个问题是SSIS转换为DATE不一致。在SSIS的大多数Excel日期列中,我都将该列转换为Unicode,然后使用SUBSTRING和+在表达式中进行构建。 (尽管直到大多数时候都解决了这个问题,我还是很傻。所以我一直坚持下去。)

因此,我的建议是使用字符串函数建立所需的日期。