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

时间:2014-02-25 11:41:54

标签: sql-server-2008 ms-access datetime import

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

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

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,不更改日期顺序,不勾选日期中的前导零等)但最后我必须将日期作为文本导入,这阻止我现在做任何计算。

非常感谢您的帮助

5 个答案:

答案 0 :(得分:2)

  

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

是的,您无法将文本字段作为真实日期进行操作,但您可以运行生成表查询以将其转换为真实的Date/Time值,如下所示:

SELECT 
    ID, 
    CDate(Left([Field1],InStr([Field1],".")-1)) AS Date1, 
    CDate(Left([Field2],InStr([Field1],".")-1)) AS Date2 
INTO SqlDataWithRealDates
FROM SqlData;

原始导入的问题是Access Date/Time值不支持小数秒,因此如果值包含00:00:00.000,则Access将永远不会识别这些值。上面的查询会在将字符串传递给.000之前删除尾随CDate()

Johnny Bones在下面的评论中建议的另一个替代方法是更改​​SQL Server查询以使用类似CONVERT(VARCHAR(10), [Field1], 101) AS Date1的内容从最终导入的字符串中删除时间组件。

答案 1 :(得分:1)

我只是将其作为答案添加,因为它最终成为了一个有效的方法:

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

这样的东西
SELECT CONVERT(VARCHAR(10), [Field1], 101) AS Date1

这将消除它的时间,Access应该识别它。

答案 2 :(得分:0)

我发现如果你使用" M / d / yyyy HH:mm:ss"作为日期格式(.NET),Access将正确导入日期/时间,至少对于您在美国的情况。注意,小时是24小时的时间。它使用AM / PM指示器在12小时内无法工作。这与Excel不同,后者可以使用12小时的时间。如果你包括毫秒,它就不会工作。如果你不需要,你可以暂停休假。

答案 3 :(得分:0)

如果您的输出是CSV文件,请将输出格式更改为“MM / DD / YYYY”,并从日期中删除时间。 它会导入很好。 如果您需要使用时间,请为其创建另一列,并删除仅留下时间的日期。 我能够在两个地方使用数百小时。

答案 4 :(得分:0)

Access会正确导入数据中的日期和时间信息。您无需删除(或删除)时间信息。我没有测试过小秒。但是,如果数据列中有重复项,则可能需要修复它,并且还应正确设置日期格式(YMD,DMY等) 这是最近正确导入的文本文件的链接。 http://hodentekmsss.blogspot.com/2017/02/importing-text-file-into-ms-access.html