2014-11-06 92 views
2

我正在將數據從SQL導入到R中。數據包含SQL日期時間格式的列,日期格式如下:2014-10-01 13:00:05。但是,當我使用RODBC軟件包將這些數據導入到R中時,R中的列格式化爲數據類型POSIXct,並顯示如下列:2014-10-01即它不包含小時,分鐘或秒。R和SQL:從SQL到R的導入日期和時間

有誰知道如何從SQL導入到R並保持小時,分鐘和秒?

請讓我知道如果我需要添加任何問題進一步澄清。

感謝

邁克

+0

您是否試圖增加'POSIXct'類的數字參數值? – 2014-11-06 15:18:39

+0

不,我該怎麼做? – Mike 2014-11-06 15:32:22

+0

[This](http://stat.ethz.ch/R-manual/R-devel/library/base/html/DateTimeClasses.html)可能會有所幫助。 – 2014-11-06 15:37:37

回答

1

我也有這樣做的sqlQuery的問題。 如果你的數據集不是太大,簡單的解決方法是「as.is」選項。這與調用SQLFetch

sqlFetch(myconn, "table_name", as.is = c(TRUE,TRUE,TRUE,TRUE)) 
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" 

一種解決方案是與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")