0

我正在使用 ROracle 包为项目拉取数据,在拉取之前,代码会将 R 会话和 Oracle 时区同步到 UTC:

Sys.setenv(TZ = "00:00")
Sys.setenv(ORA_SDTZ = "00:00")

但是,根据我所见,我们的 Oracle 数据库似乎设置为太平洋时间(我们当地的时区)。因此,基于此,我尝试将上面的代码更改为同步到太平洋时间。

Sys.setenv(TZ = "America/Los_Angeles")
Sys.setenv(ORA_SDTZ = "America/Los_Angeles")

我使用 2018-01-01 到 2020-12-31 的日期尝试了我的原始 UTC 拉动,而我的太平洋拉动在同一日期范围内,它们似乎都工作正常。但是,当我尝试将日期更改为 1999-01-01 至 2001-12-31 时,如果将时区设置为 UTC,则它可以正常工作,但是一旦我将其更改为太平洋时区,我就会收到此错误:

Error in .oci.GetQuery(conn, statement, data = data, prefetch = prefetch,  : 
  Error in try({ : 
  ORA-01878: specified field not found in datetime or interval

我尝试测试我的查询,出于某种特殊原因,从 SELECT 语句中删除了一个名为 ATIME 的特定变量,即使时区设置为太平洋,代码也可以工作。有没有人对此有任何见解?可能是由于此 ATIME 变量的数据类型造成的吗?我的 SQL 开发人员程序似乎表明该变量的数据类型为 DATE。这可能是因为夏令时节省时间是太平洋时区而不是UTC时区的事情吗?当然,如果夏令时是太平洋时间代码不适用于 2018-2020 拉动的问题,但它似乎确实有效?

4

0 回答 0