【发布时间】:2014-09-26 12:20:52
【问题描述】:
我需要将一个 csv 文件导入我的访问权限,其中包含格式为 dd/mm/yyyy hh:mm:ss 的日期时间列
这是我目前正在做的事情
DoCmd.TransferText acImportDelim, "my_specification", "temp_table", filePath, True
updateQuery = "Update my_table " _
& "INNER JOIN " _
& "(SELECT field1, field2, field_date " _
& "FROM temp_table) " _
& "ON my_table.field1 = temp_table.field1 AND my_table.field2 = temp_table.field2 " _
& "SET my_table.field_date = temp_table.field_date " _
& "WHERE my_table.field_date IS NULL"
我使用 TransferText 将 csv 文件内容临时存储到表中。 “my_specification”用于指定日期时间列格式为dd/mm/yyyy hh:mm:ss。
然后我使用更新查询来更新临时表中的日期时间字段。
但是,这里的问题是 temp_table.field_date 格式会根据用户的系统区域设置而有所不同。如果我的用户将 mm/dd/yyyy 作为系统设置,则会在 my_table 中创建错误的更新。
为了更好地描述问题,以日期 2014 年 8 月 4 日为例。在 CSV 文件中,存储为 04/08/2014 12:12:12。然后将其导入到我的 temp_table field_date 列中。
当我更新 my_table 时,用户的区域设置因素会出现。如果我的用户将系统日期格式设置为 dd/mm/yyyy,则可以正确读取为 2014 年 8 月 4 日。但是,如果我的用户将系统日期设置为 mm/dd/yyyy,则日期将读取为 2014 年 4 月08.
我是否可以为此更新强制使用明确的日期时间格式?
我用的是MS Access 2013,但我希望数据库也能兼容Access 2003。
谢谢。
【问题讨论】:
-
您能确认一下吗:根据您的 cmets,我假设 temp_table.field_date 是一个 TEXT 列。它始终包含您指定格式的日期,即
dd/mm/yyyy hh:mm:ss。 my_table.field_date 是一个 DATE 列。在具有美国日期设置的计算机上更新语句失败。我的所有假设都是对的吗?如果没有,请更新您的问题以包含列数据类型的详细信息 -
问题类似于stackoverflow.com/questions/16661737/…,这个解决方案应该可以工作。
-
@DaleM:不,一点也不相似。该解决方案适用于 SQL Server。如何在 Access 中使用转换功能?
-
Access 等效项是
CDate(value) -
@cha csv文件中的原始字段可以是TEXT,但是在我的TransferText函数与规范之后,它已经在temp_table.field_date中转换为日期时间格式
标签: sql ms-access vba ms-access-2003 ms-access-2013