Вставить данные метки времени в базу данных MySql из R - PullRequest
0 голосов
/ 08 октября 2018

Я хочу вставить данные из фрейма данных R в таблицу MySql.Все работает отлично, кроме столбца geburtstage, который имеет тип timestamp.Класс geburtstage столбца в кадре данных - «POSIXct», «POSIXt».Результат в базе данных всегда 0000-00-00 00: 00: 00.

Здесь мой сеанс R:

library(XLConnect)
excel.file <- file.path("c:/path/test.xlsx")
elements <- readWorksheetFromFile(excel.file, sheet=1)
elements
       name nummer geburtsdatum
1     Anton      1   1967-05-11
2     Berti      2   1964-05-14
3     Conni      3   1967-01-01
4       Det      4   1967-01-01
5       Edi      5   1967-01-01
6 Fritzchen      6   1967-01-01

class(elements$geburtsdatum)
[1] "POSIXct" "POSIXt" 

library(RMySQL)
library(DBI)
con <- dbConnect(RMySQL::MySQL(), host = "127.0.0.1", user = "root", password = "xxxx", dbname = "test")
dbWriteTable(
+     conn = con,
+     name='testdaten3',
+     value = elements,
+     row.names = FALSE,
+     append = TRUE,
+     field.types = c(
+         name = "varchar(45)",
+         nummer = "tinyint",
+         geburtsdatum = 'timestamp'
+     )
+ )
[1] TRUE
--- end of R session ---

MySql таблица базы данных testdaten3:

id      name    nummer  geburtsdatum
    1   Anton   1       0000-00-00 00:00:00
    2   Berti   2       0000-00-00 00:00:00
    3   Conni   3       0000-00-00 00:00:00
    4   Det     4       0000-00-00 00:00:00
    5   Edi     5       0000-00-00 00:00:00
    6   Fritzchen   6   0000-00-00 00:00:00

Я уже пытался преобразовать данные следующим образом: elements $ geburtsdatum <- format (elements $ geburtsdatum, '% Y-% m-% d% H:% M:% S') Но результат был тот же.Я использую RStudio версии 1.1.456 с R 3.5.1 под Windows 8.1 и MySql Server 5.6. </p>

Кто-нибудь может помочь?

С уважением

Гетц Эдингер

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Спасибо!Я нашел ошибку.Если я использую дату до '1970-01-01 01:00:01', дата будет изменена базой данных на '0000-00-00 00:00:00'.Поэтому, если я использую дату, равную «1970-01-01 01:00:01» или более новую, результат будет правильным.Не имеет значения, делаю ли я это на R или на MySQL.* ПРОБЛЕМА РЕШЕНА *

0 голосов
/ 08 октября 2018

Из вашего примера кажется, что geburtsdatum - это просто дата без значения времени.В таком случае, почему бы не использовать as.Date (elements $ geburtsdatum), чтобы изменить его на тип даты в вашем фрейме данных, а затем использовать CONCAT, чтобы добавить его в базу данных MySQL?

Например:

CONCAT(elements$geburtsdatum, " ", "00:00:00")

По сути, вы добавляете день рождения к значению времени заполнителя, чтобы сделать отметку времени.

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