sql - R 和 SQL : Importing date and time from SQL to R

标签 sql r date import

我正在将数据从 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/

相关文章:

sql - 使用 Join,从多个没有外键的 SQL 表中选择值

sql - 在Oracle中查找不包含数字数据的行

r - 修改 PlotSlope 输出(pequod 包)

r - 如何从 R 中的数据框创建直方图

r - 从列表和子列表中提取 xts 对象

android - 从给定的日期和时间创建 30 分钟的时段

javascript - 突出显示表格行中的最近日期

mysql - SQL 按给定行列出包含 '1' 的列

c# - 带日期的复杂 LINQ to SQL 查询

mysql - 值的总和并以年份格式显示