Сдвиг часового пояса и потеря миллисекунд при вставке дат в Oracle с использованием пакета R odbc - PullRequest
0 голосов
/ 22 марта 2019

Я переключаюсь с использования пакета ROracle на использование пакета odbc для подключения к Oracle.Используя ROracle, я смог вставить дату и время в миллисекундах в таблицу с полем типа данных timestamp.При использовании пакета odbc миллисекунды теряются.Кроме того, когда я запрашиваю дату, которую я только что вставил, время сдвигается на четыре часа вперед (я на востоке, поэтому, по-видимому, он переходит на время UTC).Я подтвердил, что время правильно вставлено в Oracle.Есть ли опция, которую можно установить так, чтобы миллисекунды сохранялись, и есть ли способ предотвратить смещение времени?

library(odbc)

options(digits.secs = 6)

Sys.setenv(TZ = "EST5EDT",
           ORA_SDTZ = "EST5EDT")

conn <- DBI::dbConnect(odbc::odbc(),
                       driver = "Oracle12c",
                       uid = rstudioapi::showPrompt(title = "username", message = "username", default = ""),
                       pwd = rstudioapi::askForPassword(),
                       dbq = "dbname",
                       timezone = Sys.timezone())

DBI::dbExecute(conn, "create table test_table (datetime timestamp(6))")

df <- data.frame(DATETIME = Sys.time(), stringsAsFactors = FALSE)

# the time has milliseconds in R
print(df)

# insert data
res <- dbSendStatement(conn, "insert into test_table (datetime) values (:1)")
dbBind(res, df)
dbGetRowsAffected(res)
dbClearResult(res)

# the time does not have milliseconds when read back from Oracle and is shifted four hours forward
dbGetQuery(conn, "select * from test_table")    

1 Ответ

0 голосов
/ 23 марта 2019

Передайте значение временной метки в виде строки и преобразуйте его в SQL:

insert into test_table (datetime) values (TO_TIMESTAMP(:1, 'DD-MON-YYYY HH24:MI:SS.FF'))

Передайте свой параметр в виде строки, которая соответствует формату в функции TO_TIMESTAMP, например,

"22-MAR-2019 17:46:57.123456"

и измените формат даты так, как вам удобно.

Удачи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...