Ошибка при обновлении файла в MySQL - PullRequest
0 голосов
/ 04 июня 2018

Я пытаюсь загрузить файл данных CSV в MySQL, который позже мне нужно перейти на HDFS, но при обновлении файла

mysql > load data infile '/var/lib/mysql-files/online_retail.csv' into table retail fields terminated by ',' ignore 1 lines;       

ОШИБКА: "Неверное значение даты: '12 /1/2010 8:26 'для столбца' invoicedate 'в строке 1 "

mysql> DESCRIBE  retail;

 +-------------+--------------+------+-----+---------+-------+ 
| Field       | Type         | Null | Key | Default | Extra | 
+-------------+--------------+------+-----+---------+-------+ 
| InvoiceNo   | int(11)      | YES  |     | NULL    |       | 
| stockcode   | varchar(20)  | YES  |     | NULL    |       | 
| Description | varchar(500) | YES  |     | NULL    |       | 
| Quantity    | int(11)      | YES  |     | NULL    |       | 
| invoicedate | date         | YES  |     | NULL    |       | 
| UnitPrice   | double       | YES  |     | NULL    |       | 
| CustomerId  | int(11)      | YES  |     | NULL    |       | 
| Country     | varchar(30)  | YES  |     | NULL    |       | 
+-------------+--------------+------+-----+---------+-------+

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Если вы задаете тип данных как «ДАТА», формат даты должен быть в форме «ГГГГ-ММ-ДД» или «ГГ-ММ-ДД».Либо задайте тип данных как STRING, либо преобразуйте данные в формат ГГГГ-ММ-ДД ...

То есть с 01.12.2010 8:26 до 2010/12/01 Надеюсь, это поможет

0 голосов
/ 04 июня 2018

Как указано в eggyal и как указано в Дата и время Литералы :

MySQL распознает DATE значения в следующих форматах:

  • В виде строки в формате 'YYYY-MM-DD' или 'YY-MM-DD'.Разрешен «расслабленный» синтаксис: любой символ пунктуации может использоваться в качестве разделителя между частями даты.Например, '2012-12-31', '2012/12/31', '2012^12^31' и '2012@12@31' эквивалентны.

  • В виде строки без разделителей в формате 'YYYYMMDD' или 'YYMMDD'при условии, что строка имеет смысл в качестве даты.Например, '20070523' и '070523' интерпретируются как '2007-05-23', но '071332' является недопустимым (содержит бессмысленные части месяца и дня) и становится '0000-00-00'.

  • Как число в формате YYYYMMDD или YYMMDD, при условии, что число имеет смысл как дата.Например, 19830905 и 830905 интерпретируются как '1983-09-05'.

А для вашего конкретного случая несколько строк ниже:

MySQL распознает значения DATETIME и TIMESTAMP в следующих форматах:

  • В виде строки в формате 'YYYY-MM-DD HH:MM:SS' или 'YY-MM-DD HH:MM:SS'.Здесь также разрешен «смягченный» синтаксис: любой знак пунктуации может использоваться в качестве разделителя между частями даты или частями времени.Например, '2012-12-31 11:30:45', '2012^12^31 11+30+45', '2012/12/31 11*30*45' и '2012@12@31 11^30^45' эквивалентны.

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

  • Дата и время могут быть разделены символом T, а не пробелом.Например, '2012-12-31 11:30:45' '2012-12-31T11:30:45' эквивалентны.

  • как строка без разделителей в формате 'YYYYMMDDHHMMSS' или 'YYMMDDHHMMSS', при условии, что строка имеет смысл в качестве даты,Например, '20070523091528' и '070523091528' интерпретируются как '2007-05-23 09:15:28', но '071122129015' является недопустимым (имеет бессмысленную мелкую часть) и становится '0000-00-00 00:00:00'.

  • Asчисло в формате YYYYMMDDHHMMSS или YYMMDDHHMMSS, при условии, что число имеет смысл в качестве даты.Например, 19830905132800 и 830905132800 интерпретируются как '1983-09-05 13:28:00'

.

Поэтому ваше выражение не является допустимым MySQL, ни датой, ниметка времени.Чтобы соответствовать одному из литеральных форматов, описанных выше, вы должны либо создать сценарий, который позволит вашим данным времени соответствовать формату DATETIME или TIMESTAMP, и, возможно, обновить вашу базу данных, чтобы изменить тип счета.

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