我正在尝试将批处理中的数据从Excel工作表导入到Sql Server数据库。除电子表格中的一个日期字段外,一切正常。返回的日期与电子表格中的值相差四年
示例:Excel工作表的日期为10/24/2010 14:18
,但当我查看查询中的列时,日期为10/23/2006 2:18
。对于工作表中的每一行,重复此模式,4年和1天。
Excel列作为自定义类型来找我,格式为m/d/yyyy h:mm
。我从外部供应商处收到此消息并让他们更改列不会是我最简单的解决方案。我希望有人为此工作,并能指出我正确的方向。
对于它的价值,查询的相关部分是:
从MyWorksheet中选择[创建日期]
TIA。
答案 0 :(得分:1)
我猜这个电子表格是从Macintosh或其他一些默认使用1904日期系统的计算机生成的。有关详细信息,请参阅here。
对于解决方案,您可以在导入之前尝试切换工作簿的日期系统。我从来没有处理过这个,所以无法确定它是否会起作用,但这是VBA命令:
ActiveWorkbook.Date1904 = True
或者,正如上面链接的文章中所述,您可以在每个日期添加1,462。
编辑:我意识到,如上所述,更改日期系统只会在您的过程中解决问题,以便在Excel中显示错误。我认为每个日期增加1,462(或4年和1天)是唯一的解决方案。答案 1 :(得分:0)
如果它是一致的,你可以这样做:
Select DateAdd(dd,1, DateAdd(yy,4,[Date Created])) From MyWorksheet
当然,您必须确保列中每个行都会发生这种情况,最好找到问题的原因并解决问题。我也不确定dataadd函数在这里运行的确切级别。它是sql server拉动数据后做的,你会没事的。但是如果sql server将此作为ole查询传递给excel,那么dateadd函数调用需要稍微调整一下。 HTH