我正在将数据从SQL导入到R中。数据包含SQL日期时间格式的列,日期格式如下:2014-10-01 13:00:05
。但是,当我使用RODBC软件包将这些数据导入到R中时,R中的列格式化为数据类型POSIXct
,并显示如下列:2014-10-01
即它不包含小时,分钟或秒。R和SQL:从SQL到R的导入日期和时间
有谁知道如何从SQL导入到R并保持小时,分钟和秒?
请让我知道如果我需要添加任何问题进一步澄清。
感谢
迈克
我正在将数据从SQL导入到R中。数据包含SQL日期时间格式的列,日期格式如下:2014-10-01 13:00:05
。但是,当我使用RODBC软件包将这些数据导入到R中时,R中的列格式化为数据类型POSIXct
,并显示如下列:2014-10-01
即它不包含小时,分钟或秒。R和SQL:从SQL到R的导入日期和时间
有谁知道如何从SQL导入到R并保持小时,分钟和秒?
请让我知道如果我需要添加任何问题进一步澄清。
感谢
迈克
我有同样的问题,遇到下列解决方案来:
R: loss of precision when POSIXct binding with datetime (sql server)
您只需在阅读列的字符串:
选择转换(nvarchar(24),Dt,21)作为Dt,来自mybus的值
-Mike
我也有这样做的sqlQuery的问题。 如果你的数据集不是太大,简单的解决方法是“as.is”选项。这与调用SQLFetch
sqlFetch(myconn, "table_name", as.is = c(TRUE,TRUE,TRUE,TRUE))
这可能是工作得很好,由于你的机器的本地时区(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")
您是否试图增加'POSIXct'类的数字参数值? – 2014-11-06 15:18:39
不,我该怎么做? – Mike 2014-11-06 15:32:22
[This](http://stat.ethz.ch/R-manual/R-devel/library/base/html/DateTimeClasses.html)可能会有所帮助。 – 2014-11-06 15:37:37