Sql server 2008 将日期时间字段从csv/txt导入Access

Sql server 2008 将日期时间字段从csv/txt导入Access,sql-server-2008,ms-access,datetime,import,Sql Server 2008,Ms Access,Datetime,Import,我将SQL Server 2008查询的输出保存到文本文件中,并尝试将其链接到Access数据库Access 2007-2010 文本文件包含两个SQL Server 2008日期时间格式的日期列,如下所示: EFFECTIVE START DATE: --------------------- 2013-07-01 00:00:00.000 EFFECTIVE END DATE: ------------------- 2014-06-30 00:00:00.000 在导入向导中,我单击

我将SQL Server 2008查询的输出保存到文本文件中,并尝试将其链接到Access数据库Access 2007-2010

文本文件包含两个SQL Server 2008日期时间格式的日期列,如下所示:

EFFECTIVE START DATE:
---------------------
2013-07-01 00:00:00.000 

EFFECTIVE END DATE:
-------------------
2014-06-30 00:00:00.000
在导入向导中,我单击高级并更改以下内容:

代码页=西欧窗口,而不是Unicode UTF-8 对于2个datetime列:

数据类型=日期/时间 日期订单=YMT 日期分隔符=- 日期中的前导零=勾选 在导入向导中,数据看起来很好,但一旦导入完成,我在Access中打开表,就会看到Num!在两个日期列中

我在导入向导中尝试了多种设置组合,将代码页保留为Unicode,不更改日期顺序,不勾选日期中的前导零,等等,但最后我不得不将日期作为文本导入,这使我现在无法进行任何计算

非常感谢你的帮助

最后,我不得不将日期作为文本导入,这使我现在无法进行任何计算

如果为True,则不能将文本字段作为True dates进行操作,但可以运行make table查询将其转换为real Date/Time值,如下所示:

选择 身份证件 CDateLeft[Field1],InStr[Field1],-1截至日期1, CDateLeft[Field2],InStr[Field1],-1截止日期2 使用RealDates将数据转换为SqlDataWithRealDates 从SqlData; 原始导入的问题是,访问日期/时间值不支持分数秒,因此,如果这些值包含00:00:00.000,则Access将永远无法识别这些值。在将字符串传递给CDate之前,上面的查询将删除尾随的.000


Johnny Bones在下面的评论中建议的另一种替代方法是修改SQL Server查询,使用CONVERTVARCHAR10[Field1],101作为Date1,从最终将导入的字符串中删除时间组件。

我只是将其作为一个答案添加,因为它最终起到了作用:

如果可以控制SQL Server的输出,则可以更改视图/存储过程中日期字段的格式。差不多

SELECT CONVERT(VARCHAR(10), [Field1], 101) AS Date1

这将减少它的时间,Access应该能够识别它。

我发现如果您使用M/d/yyyy HH:mm:ss作为日期格式.NET,Access将正确导入日期/时间,至少对于您在美国的情况是这样。注意,小时是24小时的时间。它在12小时内无法使用AM/PM指示器。这和Excel不同,Excel的工作时间为12小时。如果包含毫秒,它将不起作用。如果不需要时间,可以将其保留。

如果输出为CSV文件,请将输出格式更改为MM/DD/YYYY,并从日期中删除时间。 很好。 如果您需要使用时间,请为其创建另一列,并去掉日期,只留下时间。
我可以在两个地方使用数百小时。

Access可以正确导入数据中的日期和时间信息。您无需删除或删除时间信息。我没有测试分数秒。但是,如果数据列中存在重复项,则可能需要对其进行修复,并且还应正确设置日期格式YMD、DMY等。 下面是指向正确导入的文本文件的最新链接。

这是导入到新表中还是附加到现有表中?更改代码页值的原因是什么?它被导入到新表中,而不是附加到现有表中。即使我没有更改代码页并将其保留为默认的Unicode UTF-8,我仍然无法成功导入datetime列,因此这不应该是问题所在。非常感谢,我真的很感谢你的帮助,这是我关于StackOverflow的第一个问题谢谢Gord。你是说没有其他方法,我必须首先将其作为数据类型=文本列导入,然后将其重新转换为日期?@user3249299实际上,这是唯一的方法。Access日期/时间值不支持小数秒,因此Access将永远无法识别包含00:00:00.000的值。如果布局从未更改,则只运行使用导入模板的宏、运行修复这两列的生成表(如Gord所述)可能不是什么大麻烦,然后删除最初导入的表。或者,如果您可以控制SQL Server的输出,则可以更改视图/存储过程中日期字段的格式。类似于选择CONVERTVARCHAR10[Field1],101作为Date1。这将减少它的时间,Access应该能够识别它。我回到SQL查询并进行了转换,因为这是我的案例中最简单的解决方案。皈依者工作得很好,谢谢@Johnny Bones