在R中,我运行以下查询来检索数据:
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(Toad for 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
的日期类型为DATE
。我的计算机以及服务器的时区是英国。
我的问题是双重的:
1.为什么会发生这种情况
我实际上需要日期为字符格式。我们是否有一种简单的方法可以请求在R中将{Date> Date
作为character
而不是("POSIXct" "POSIXt")
收到?
谢谢!
答案 0 :(得分:0)
此问题是由操作系统和oracle会话的默认时区设置引起的。 您可以覆盖这些设置。在我的情况下,以下规范可以解决问题。
Sys.setenv(TZ='CET') # Operating system
Sys.setenv(ORA_SDTZ='CET') # Oracle Session
我在所有R脚本的开头都包含这些设置,但可能还有一种方法可以将这些设置作为新的默认设置。
以下是有关Oracle时区参数的更多信息:Setting the Session Time Zone