使用 RODBC 将访问表导入 R 时保存 Date/Time 列的时间戳

Conserving timestamps for Date/Time column when importing access sheets into R using RODBC

我有一个访问数据库 (/access.mdb),其中一个 sheet(“潜水”)我正尝试使用以下代码导入 R:

db <- odbcDriverConnect("Driver={Microsoft Access Driver (*.mdb, *.accdb)};
                        DBQ=D:/folder/access.mdb")

data <- as_tibble(sqlFetch(db, "dive", rownames=TRUE)) %>%
  select("ref", "DE_DATE") 

sheet 可以正常导入,但是“ds_date”列是数据库中的一个 Date/Time 对象,它只包含作为 POSIXct 对象的日期,而不包含时间戳.在数据库中,它们 space 以 dd/mm/yyyy HH:MM:SS 形式分开,如下所示,我认为这是出现问题的地方:

我查看了 sqlFetch 函数,但在读取 sheet 时看不到一种立即明显的方法来操作各个列。我不太精通 SQL,所以不确定如何查询它以确保保留这些单元格中的所有信息。我想导入包含日期和时间戳的列,格式与数据库中的格式相同。

非常感谢您的帮助。

既然您正在使用 dplyr/tidyverse,为什么不使用完整的 DBI/dbplyr?

library(DBI)
library(odbc)
library(dplyr)
library(dbplyr)

db <- dbConnect(odbc(), .connection_string = "Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=D:/folder/access.mdb")
data <- tbl(db, "dive") %>%
    select(ref, DE_DATE) %>%
    collect()

根据我的经验,DBI 倾向于更频繁地获得正确的类型,并且使用 dbplyr(因为您已经在使用 dplyr)具有不获取您不使用的数据的额外优势。在示例中,仅提取 refDE_DATE 列,而如果您使用 RODBC,则会提取所有列,然后丢弃未使用的列。

请注意 collect() 调用意味着您实际上是在获取数据,在此之前任何操作实际上都构成一个 SQL 语句并且不获取数据。