Не удается вставить столбец даты из кадра данных в столбец даты в SQL Server - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть датафрейм, взятый из CSV-файла, который содержит несколько столбцов с датами.Формат дат - 12/05/2019 или 2019-08-15T00:00:00Z в зависимости от столбца.

Я очистил столбцы, используя следующий код:

transform(DataframeName,
     First_Date = dmy(First_Date)
     Second_Date = ymd_hms(Second_Date))

Это успешно переводит все даты в формат YYYY-MM-DD.

Я пытаюсьимпортируйте этот фрейм данных в базу данных SQL с помощью следующей команды:

dbWriteTable(con, "DatabaseTable", DataframeName, append = TRUE)

Всякий раз, когда я делаю это, я получаю следующую ошибку:

Ошибка в result_insert_dataframe (rs @ ptr, values): nanodbc / nanodbc.cpp: 1587: 22018: [Microsoft] [Драйвер ODBC 17 для SQL Server] Недопустимое значение символа для спецификации приведения

Я подтвердил, что единственными столбцами, вызывающими эту ошибку, являются датаколонны, и все они вызывают это.Я попытался преобразовать даты в строки, преобразовать строки обратно в другую дату, используя as.Date, импортировать числа, преобразовать пустые значения в NA, и ничего не получилось.Когда я снова пытаюсь преобразовать столбец (чтобы сделать его строковым литералом), он возвращается к исходному значению.Например:

Исходное значение: 12/05/2019

transform(DataframeName,
     First_Date = dmy(First_Date)

Следующее значение: 2019-05-12

sqlData(con, DataframeName, row.names = NA

Последнее значение: 12/05/2019

Как будто это никогда не трансформировалось в первую очередь.

Ранее я импортировал столбцы даты из очень похожих файлов CSV, просто используя as.Date, поэтому я не могу понять, что это за ошибка.

1 Ответ

0 голосов
/ 25 сентября 2019

Это вызвано тем, что на самом деле не сохраняются какие-либо преобразования в информационном кадре.Если вы видите приведенный выше код, он показывает это:

transform(DataframeName,
    First_Date = dmy(First_Date)

Когда вместо этого должно быть this :

DataframeName <- transform(DataframeName,
    First_Date = dmy(First_Date)

Результаты преобразования отображаются вконсоль под запущенным чанком может вас обмануть, даже если она ничего не перезаписывает.Комментарий о значении, которое, по-видимому, восстанавливается при повторном преобразовании, является большой подсказкой.

Не забудьте дважды проверить простые вещи.

...