【问题标题】:R and SQL: Importing date and time from SQL to RR 和 SQL:将日期和时间从 SQL 导入到 R
【发布时间】:2015-01-03 03:49:13
【问题描述】:

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

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

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

谢谢

迈克

【问题讨论】:

  • 您是否尝试增加 POSIXct 类的 digits 参数的值?
  • 不,我该怎么做?
  • This 可能会有所帮助。
  • 这取决于您使用的数据库和驱动程序。 ODBC 协议在转换类型时会变得有点模糊(不同的数据库考虑不同的事物日期、日期时间等),因此 RODBC 必须做一些有根据的猜测。尝试使用 as.is 参数将该列作为字符拉入,然后在 R 中自行转换。
  • 大家好,感谢您的回复。我还在挣扎。我该如何做as.is 参数?我的查询目前看起来像这样sqlQuery(myconn,paste0("SELECT Period FROM stats.HourV2OnDisk WHERE Login = ", clientLogins[j,1]))

标签: sql r date import


【解决方案1】:

这可能是由于您机器的本地时区 (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"

一种解决方案是按原样获取数据,然后手动转换为指定正确时区的 POSIXct。在这种情况下,数据库包含 UTC 时间戳:

data <- sqlQuery(mssql,
                 "SELECT timestamp, value FROM table",
                 as.is=c(TRUE, FALSE))
data$timestamp <- as.POSIXct(data$timestamp, tz="UTC")

【讨论】:

    【解决方案2】:

    我在使用 sqlQuery 时也遇到了问题。 如果您的数据集不是太大,一个简单的解决方法是“按原样”选项。这适用于 sqlFetch

    sqlFetch(myconn, "table_name", as.is = c(TRUE,TRUE,TRUE,TRUE))
    

    【讨论】:

      【解决方案3】:

      我有同样的问题,并遇到了以下解决方案:

      R: loss of precision when POSIXct binding with datetime (sql server)

      您只需将列作为字符串读取:

      select convert(nvarchar(24), Dt, 21) as Dt, value from mybus

      -迈克

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-08-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多