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 подвел меня там.

Итак, мои вопросы:

  1. Зачем мне нужен символ @, чтобы использовать эту функцию?
  2. Должен ли формат данных ("%c/%e/%Y") быть форматом введенных данных или желаемого результата?
  3. Можно ли таким же образом запечатлеть время?

извините за большой пост!

Вернуться в 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, ...

Другие вопросы по тегам