R和SQL:从SQL导入日期和时间到R.

时间:2014-11-06 15:14:18

标签: sql r date import

我将数据从SQL导入R.数据包含一个SQL格式为DateTime的列,其日期格式如下:2014-10-01 13:00:05。但是,当我使用RODBC包将这些数据导入R时,R中的列格式化为数据类型POSIXct并显示如下列:2014-10-01即它不包含小时数,几分钟或几秒钟。

有谁知道如何从SQL导入R并维持小时,分钟和秒?

如果我需要在问题中添加任何内容以便进一步澄清,请告诉我。

由于

麦克

3 个答案:

答案 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