Как преобразовать объект даты смазки при сохранении кадра данных в базу данных SQLite в R? - PullRequest
0 голосов
/ 16 мая 2018

Предположим, что вы храните фрейм данных, содержащий даты, в базе данных sqlite, используя следующий код:

df <- data.frame(d = lubridate::as_date(1:30))
mydb <- DBI::dbConnect(RSQLite::SQLite(), "database.db")
DBI::dbWriteTable(mydb, "mytable", df)
DBI::dbDisconnect(mydb)

Насколько я понимаю, такое преобразование, как

as.numeric(df$d)

выполняется перед сохранением данных в базу данных sqlite. Это правильно? Почему вместо преобразования строк предпочтительнее числовое преобразование?

1 Ответ

0 голосов
/ 16 мая 2018

Коротко:

  1. Нет такой вещи как lubridate date object. Существует базовый тип R Date, который вы можете создать, _inter alias, с помощью as.Date(). Если вы чувствуете, что должны использовать другой пакет, пусть будет так.

  2. Тип Date хранится внутри в виде (с плавающей запятой) количества (дробных) дней с даты начала (1970-01-01). Хранение в виде числа является наиболее эффективным способом.

  3. Базы данных иногда имеют или не имеют собственные типы дат. MySQL не было много лет; Я не могу вспомнить, где находится RSQLite. Это не имеет значения, потому что ...

  4. База данных пакеты доступа нужны конвертеры из даты и даты и времени вместе с собственной поддержкой в базе данных.

  5. Мы встроили это в RPostgreSQL десять лет назад, поскольку PostgreSQL имеет его изначально.

  6. Если вы хотите текстовое представление, но ни один (или оба) из интерфейса или уровня базы данных не может делать типы Date, то сначала вызовите format() и сохраните строку символов. Каждая база данных знает, как это сделать. Но вы только что потеряли информацию о типе ...

...