我将数据从SQL导入R.数据包含一个SQL格式为DateTime的列,其日期格式如下:2014-10-01 13:00:05
。但是,当我使用RODBC包将这些数据导入R时,R中的列格式化为数据类型POSIXct
并显示如下列:2014-10-01
即它不包含小时数,几分钟或几秒钟。
有谁知道如何从SQL导入R并维持小时,分钟和秒?
如果我需要在问题中添加任何内容以便进一步澄清,请告诉我。
由于
麦克
答案 0 :(得分:2)
我也遇到过sqlQuery这样做的问题。 如果数据集不是太大,则可以轻松修复“as.is”选项。这适用于sqlFetch
sqlFetch(myconn, "table_name", as.is = c(TRUE,TRUE,TRUE,TRUE))
答案 1 :(得分:2)
这可能是由于计算机的本地时区(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。在这种情况下,db包含UTC时间戳:
data <- sqlQuery(mssql,
"SELECT timestamp, value FROM table",
as.is=c(TRUE, FALSE))
data$timestamp <- as.POSIXct(data$timestamp, tz="UTC")
答案 2 :(得分:1)
我遇到了同样的问题并遇到了以下解决方案:
R: loss of precision when POSIXct binding with datetime (sql server)
您只需要以字符串形式读取该列:
选择转换(nvarchar(24),Dt,21)作为Dt,来自mybus的值
-Mike