Я хочу вставить данные из фрейма данных 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.

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

С наилучшими пожеланиями

Гетц Эдингер

r
1
Goetz Edinger 8 Окт 2018 в 12:06

2 ответа

Лучший ответ

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

0
Goetz Edinger 8 Окт 2018 в 19:13

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

Нравится:

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

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

0
Randall Helms 8 Окт 2018 в 14:25