MySql загрузки данных infile STR_TO_DATE возвращается пустым?
Я импортирую 1m+ записи в мою таблицу из CSV-файла. Прекрасно работает с использованием метода загрузки данных локального файла.
Тем не менее, даты все разные форматы. Быстрый Google приведет меня к этой функции:
STR_TO_DATE
Однако, когда я реализую это, я ничего не получаю, пустая вставка. вот мой SQ, сокращенный, чтобы включить одну дату (у меня 4 с той же проблемой) и общие имена столбцов:
load data local infile 'myfile.csv' into table `mytable`
fields terminated by '\t'
lines terminated by '\n'
IGNORE 1 LINES
( `column name 1`
, `my second column`
, @temp_date
, `final column`)
SET `Get Date` = STR_TO_DATE(@temp_date, '%c/%e/%Y')
Если я сделаю:
SET `Get Date` = @temp_date
Дата из csv записывается в том формате, в котором она была в файле. Однако, когда я пробую первый метод, мой столбец таблицы становится пустым. Я изменил тип столбца на varchar (255) с метки времени, чтобы фиксировать все, что происходит, но в конечном итоге я хочу захватить ymd H:i:s (не уверен, что STR_TO_DATE может это сделать?)
Я также не уверен, почему мне нужен символ @.. Google подвел меня там.
Итак, мои вопросы:
- Зачем мне нужен символ @, чтобы использовать эту функцию?
- Должен ли формат данных ("%c/%e/%Y") быть форматом введенных данных или желаемого результата?
- Можно ли таким же образом запечатлеть время?
извините за большой пост!
Вернуться в Google сейчас...
2 ответа
Зачем мне нужен символ @, чтобы использовать эту функцию?
Символ @ означает, что вы используете переменную, поэтому прочитанная строка помещается не сразу в таблицу, а в область памяти, которая позволяет вам работать с ней перед ее вставкой. Более подробная информация на http://dev.mysql.com/doc/refman/5.0/en/user-variables.html
Должен ли формат данных ("%c/%e/%Y") быть форматом введенных данных или желаемого результата?
Это формат введенных данных, более подробную информацию можно найти на http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html.
Можно ли таким же образом запечатлеть время?
Вы должны иметь возможность, если вы выбрали правильный формат, что-то вроде
STR_TO_DATE(@temp_date,'%c/%e/%Y %h:%i:%s');
У меня была эта проблема. Для меня это помогло убедиться, что я учел пробелы, которые не были разделителями в моем загрузочном файле. Так что, если ',' является разделителем:
..., 29.04.2012, ...
может быть истолковано как "29.04.2012"
Так должно быть..., 29.04.2012, ...