我将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
在导入向导中,单击“高级”并更改以下内容:
对于2 datetime
列:
虽然仍然在导入向导中数据看起来很好但是一旦导入完成并且我在Access中打开表,我会在两个日期列中看到 #Num!。
我在导入向导中尝试了一组设置(将代码页保留为Unicode,不更改日期顺序,不勾选日期中的前导零等)但最后我必须将日期作为文本导入,这阻止我现在做任何计算。
非常感谢您的帮助
答案 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