dbGetQuery返回相差一小时的日期

时间:2017-05-30 14:56:25

标签: sql r r-dbi roracle

在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")收到?

谢谢!

1 个答案:

答案 0 :(得分:0)

此问题是由操作系统和oracle会话的默认时区设置引起的。 您可以覆盖这些设置。在我的情况下,以下规范可以解决问题。

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

我在所有R脚本的开头都包含这些设置,但可能还有一种方法可以将这些设置作为新的默认设置。

以下是有关Oracle时区参数的更多信息:Setting the Session Time Zone