4

我正在尝试使用 SSIS 将 Excel 2003 中的电子表格中的一列日期导入 SQL Server 2005。我在英国,所以希望日期格式为 dd/MM/yyyy。

不幸的是,电子表格中的列包含以 dd/MM/yyyy 格式存储为字符串的日期(使用 Excel 'General' 格式)以及使用 Excel 'Date' 格式 dd/MM/yyyy 格式的日期(使用区域设置'English (英国)')。

事情就是这样,我不能指望用户能够自己解决这个问题。

查看电子表格时,所有日期在视觉上看起来都是正确的,即 dd/MM/yyyy。

我正在尝试将值导入数据库中保存表中的 varchar 列。然后我运行一个存储过程,将这些值复制到包含日期时间列的正确表中。

问题是存储在电子表格中并使用日期格式的日期作为 MM/dd/yyyy 导入 SQL Server,而存储为字符串的日期则作为 dd/MM/yyyy 导入。我在连接字符串中有 IMEX=1 。

在同一 varchar 列中使用两种格式的日期显然会在我尝试将其放入 datetime 列时导致问题,因此

SET DATEFORMAT MDY;    
SET DATEFORMAT DMY;

没用。

有谁知道为什么 SSIS 包会将 Excel 电子表格中看似正确的日期作为 MM/dd/yyyy 导入 SQL Server?

是否有强制 SSIS 包将日期导入为 dd/MM/yyyy 的日期,这将与这种日期组合作为字符串和应用了日期格式的单元格一起使用?

还有其他想法吗?!

非常感谢,

安东尼

4

2 回答 2

5

我想你已经回答了你自己的问题。日期格式单元格的导入被视为日期,其他则被视为字符串。可能您的 SQL 服务器日期设置是 MM/dd/yyyy,因此是转换。

为什么不尝试在 SSIS 包中添加数据转换步骤,并将列中的每一项转换为单一格式 - 日期时间或字符串。然后我确信 SQL Server 将以相同的方式处理所有这些。

拉吉

于 2009-06-25T11:59:59.110 回答
2

对我有用的是添加IMEX=1到 Excel 连接字符串。

所以它看起来像这样:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Folder1\Book1.xls;Extended Properties="EXCEL 8.0;HDR=YES;IMEX=1";
于 2016-09-29T13:11:52.387 回答