【问题标题】:Get correct datetime from Oracle query via ROracle in R通过 R 中的 ROracle 从 Oracle 查询中获取正确的日期时间
【发布时间】:2013-04-05 04:54:28
【问题描述】:

我在 R 中使用 ROracle 来访问 Oracle 数据库。

我注意到,可能自夏季时间更改以来,任何 DATE(日期时间)Oracle 列现在都被错误地转换(我在 R 中得到的时间比在 Oracle DB 中少一个小时)。

vignette 的第 12 页(我几乎不明白)看起来 ROracle 和 R 将日期时间交换为自 1970 年 1 月 1 日以来的秒数,并且 R 随后调整为当地时区。

这就是我的工作

    drv <- dbDriver("Oracle");
    con <- dbConnect(drv, username = Login, password = Pwd, dbname = DB, prefetch=TRUE, bulk_read=1e6);

    test.query <- "SELECT * FROM MYTABLE WHERE ( A > to_date('2008-03-03 12:30:00', 'YYYY-MM-DD HH24:MI:SS') AND A < to_date('2008-03-03 12:40:00','YYYY-MM-DD HH24:MI:SS')  AND [other stuff])"

    test <- dbGetQuery(con, test.query);

    head(test[,c("A","B","C")])
    #                    A                   B                   C
    #1 2008-03-03 11:30:38 2008-03-02 23:00:00 2008-03-02 23:00:00 #HERE IT SHOULD BE +1 HOUR
    #2 2008-03-03 11:30:38 2008-03-02 23:00:00 2008-03-02 23:00:00
    #3 2008-03-03 11:30:41 2008-03-02 23:00:00 2008-03-02 23:00:00
    #4 2008-03-03 11:31:25 2008-03-02 23:00:00 2008-03-02 23:00:00
    #5 2008-03-03 11:31:25 2008-03-02 23:00:00 2008-03-02 23:00:00
    #6 2008-03-03 11:31:34 2008-03-02 23:00:00 2008-03-02 23:00:00

    class(test$A)
    [1] "POSIXct" "POSIXt" 
    attributes(test$A)
    $class
    [1] "POSIXct" "POSIXt" 

这是我的sessionInfo()

    sessionInfo()
    R version 2.15.2 (2012-10-26)
    Platform: x86_64-w64-mingw32/x64 (64-bit)

    locale:
    [1] LC_COLLATE=French_France.1252  LC_CTYPE=French_France.1252    LC_MONETARY=French_France.1252
    [4] LC_NUMERIC=C                   LC_TIME=French_France.1252    

    attached base packages:
    [1] stats     graphics  grDevices utils     datasets  methods   base     

    other attached packages:
    [1] data.table_1.8.9 ROracle_1.1-7    DBI_0.2-5       

    loaded via a namespace (and not attached):
    [1] tools_2.15.2

这是我从管理员那里获得的有关 Oracle DB 的信息

我能做些什么来正确解决这个问题(不仅仅是增加 1 小时,我必须在夏末收回)

【问题讨论】:

  • 我没有解决方案,但我对可能的答案很好奇,因为我遇到了完全相同的问题(在 R 3.0.0、OS X 和跨时区的中途)世界,大概)。
  • 您的问题出在 ROracle 上?
  • 是的;完全相同的事情,日期时间是一个小时。使用 RODBC 连接到同一个数据库不会显示问题。
  • 哦,所以可能是 Roracle 本身的问题?
  • 到目前为止,这是我的工作假设,是的,但我不确定。

标签: r oracle timezone posixct


【解决方案1】:

这似乎已在 2014 年 11 月 20 日发布的 ROracle-1.1.12 中得到修复。请参阅?dbReadTable 上的文档了解时区的工作方式。

【讨论】:

    【解决方案2】:

    正如您所提到的,这是 R 根据本地时区进行的时区转换。更多详情可以参考这个链接

    http://www.oralytics.com/2015/05/r-roracle-and-oracle-date-formats_27.html

    在通过 ROracle 连接之前尝试设置这些系统变量

    Sys.setenv(TZ = "GMT")
    Sys.setenv(ORA_SDTZ = "GMT")
    

    【讨论】:

    • 谢谢。这是正确的答案,因为时区转换问题在 ROracle 方面没有改变。将这两个环境变量都设置为“UTC”解决了我的问题。
    • 这个答案也对我有用。感谢您的回答和文档。
    猜你喜欢
    • 1970-01-01
    • 2013-04-17
    • 2011-05-30
    • 1970-01-01
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多