MySQL 8.0: ошибка при вставке данных даты - PullRequest
0 голосов
/ 26 октября 2019

У меня есть файл с разделителями табуляции следующим образом:

enter image description here

Когда я пытаюсь импортировать файл следующим образом в MySql:

LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/customer.csv'
INTO TABLE customers
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;

Я получаю следующую ошибку:

Неверное значение даты: '02 / 15/2008 'для столбца' BI_signup_date 'в строке 1

Как мнеисправить это?

Ответы [ 2 ]

2 голосов
/ 26 октября 2019

Формат дат в вашем файле не соответствует формату, ожидаемому MySQL. Кроме того, в этом столбце есть несколько значений без даты ('not BI'). Решение состоит в том, чтобы предварительно обработать ваш ввод, чтобы преобразовать его в соответствующий формат.

LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/customer.csv'
INTO TABLE customers
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS
(customer_id, @BI_signup_date, email_address)
SET BI_signup_date = CASE
    WHEN @BI_signup_date = 'not BI' THEN NULL
    ELSE STR_TO_DATE(@BI_signup_date, '%m/%d/%Y')
END;

Это превратит значение 'not BI' в NULL (поскольку очевидно, что это не может быть преобразовано в дату), и преобразует другиезначения в формате даты MySQL. Возможны и другие стратегии, например, проверка формата значения по регулярному выражению. При необходимости вы можете изменить логику.

Ссылка: Предварительная обработка ввода в MySQL LOAD DATA синтаксис :

Каждое значение col_name_or_user_var является либо именем столбцаили пользовательская переменная. С пользовательскими переменными предложение SET позволяет выполнять преобразования для предварительной обработки их значений перед назначением результата столбцам.

0 голосов
/ 26 октября 2019

Отредактируйте ваш CSV-файл и конвертируйте формат даты в Ymd. Это решит все ваши проблемы, связанные с форматом даты.

...