在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(甲骨文的蟾蜍)中运行完全相同的查询,它会返回
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.为什么会发生这种情况。
2.我实际上需要日期采用字符格式。有没有一些简单的方法可以要求将 DateTypeDate
作为 R 中的character
接收,而不是("POSIXct" "POSIXt")
?
谢谢!
此问题是由于操作系统和 oracle 会话的默认时区设置造成的。 您可以覆盖这些设置。就我而言,以下规范可以解决问题。
Sys.setenv(TZ='CET') # Operating system
Sys.setenv(ORA_SDTZ='CET') # Oracle Session
我将这些设置包含在所有 R 脚本的开头,但可能还有一种方法可以使这些设置成为新的默认设置。
以下是有关 Oracle 时区参数的详细信息:设置会话时区