我正在将数据从 SQL 导入到 R 中。数据包含 SQL 中 DateTime 格式的列,日期格式如下:2014-10-01 13:00:05
。但是,当我使用 RODBC 包将这些数据导入 R 时,R 中的列被格式化为数据类型 POSIXct
并显示该列,如下所示:2014-10-01
即它不包含小时、分钟或秒。
有谁知道如何从 SQL 导入 R 并维护小时、分钟和秒?
如果我需要在问题中添加任何内容以进一步澄清,请告诉我。
谢谢
迈克
最佳答案
这可能是由于您计算机的本地时区 (Sys.timezone()) 与您正在检索的数据的时区不匹配造成的。
RODBC 使用 as.POSIXct,默认情况下使用您计算机的当前时区。如果数据包含任何在该时区无效或不明确的时间戳,则可能会发生奇怪的事情。例如,夏令时的转换可能会造成麻烦。
这些工作正常,因为两个时间戳都在本地定义良好 时区和 UTC:
> as.POSIXct(c("2016-01-01 00:00:01","2016-03-26 02:30:00"))
[1] "2016-01-01 00:00:01 CET" "2016-03-26 02:30:00 CET"
> as.POSIXct(c("2016-01-01 00:00:01","2016-03-26 02:30:00"), tz="UTC")
[1] "2016-01-01 00:00:01 UTC" "2016-03-26 02:30:00 UTC"
其中第一个默默地在所有时间戳上删除 H:M:S 因为 最后的时间戳在本地时区无效:
> as.POSIXct(c("2016-01-01 00:00:01","2016-03-27 02:30:00"))
[1] "2016-01-01 CET" "2016-03-27 CET"
> as.POSIXct(c("2016-01-01 00:00:01","2016-03-27 02:30:00"), tz="UTC")
[1] "2016-01-01 00:00:01 UTC" "2016-03-27 02:30:00 UTC"
一种解决方案是使用 as.is 获取数据,然后手动转换为指定正确时区的 POSIXct。在本例中,数据库包含 UTC 时间戳:
data <- sqlQuery(mssql,
"SELECT timestamp, value FROM table",
as.is=c(TRUE, FALSE))
data$timestamp <- as.POSIXct(data$timestamp, tz="UTC")
关于sql - R 和 SQL : Importing date and time from SQL to R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26782852/