2017-05-30 57 views
0

就R我運行下面的查詢,以檢索數據日期:dbGetQuery返回按一小時的不同

test <- dbGetQuery(conn = GetConnection("default"), statement = "SELECT PK_FK_RW_BOND_HOLDING_VAL_BOND, PK_CASHFLOW_DAT FROM RW_CASH_FLOWS_ON_BONDS WHERE PK_FK_RW_BOND_HOLDING_VAL_BOND = 'AT0000385745' 
        OR PK_FK_RW_BOND_HOLDING_VAL_BOND = 'RU000A0JV7J9'") 

這返回

PK_FK_RW_BOND_HOLDING_VAL_BOND PK_CASHFLOW_DAT 
RU000A0JV7J9     2018-01-14 23:00:00 
RU000A0JV7J9     2017-01-14 23:00:00 
RU000A0JV7J9     2019-08-01 00:00:00 
RU000A0JV7J9     2019-01-31 23:00:00 
RU000A0JV7J9     2018-08-01 00:00:00 
RU000A0JV7J9     2018-01-31 23:00:00 
AT0000385745     2017-08-01 00:00:00 
AT0000385745     2017-01-31 23:00:00 

其中PK_CASHFLOW_DAT是類("POSIXct" "POSIXt")的。在另一方面,如果我在運行SQL(蟾蜍爲Oracle)完全相同的查詢返回

PK_FK_RW_BOND_HOLDING_VAL_BOND PK_CASHFLOW_DAT 
RU000A0JV7J9     1-8-2019 
RU000A0JV7J9     1-2-2019 
RU000A0JV7J9     1-8-2018 
RU000A0JV7J9     1-2-2018 
RU000A0JV7J9     1-8-2017 
RU000A0JV7J9     1-2-2017 
AT0000385745     15-1-2018 
AT0000385745     15-1-2017 

現在,PK_CASHFLOW_DAT的DateType是DATE。我的電腦以及服務器的時區都是英國。

我的問題是雙重的:
1.爲什麼這首先發生。
2.我實際上需要的日期是字符格式。是否有一些簡單的方法,我們要求在R中接收DateType Date作爲character而不是("POSIXct" "POSIXt")

謝謝!

回答

0

此問題是由於操作系統和oracle會話的默認時區設置。 您可以覆蓋這些設置。在我的情況下,下面的規範會訣竅。

Sys.setenv(TZ='CET')  # Operating system 
Sys.setenv(ORA_SDTZ='CET') # Oracle Session 

我將這些設置包含在所有R腳本的開頭,但可能還有一種方法可以將這些設置設置爲新的默認設置。

以下是有關Oracle時區參數的更多信息:Setting the Session Time Zone