Я работаю с Workbench Mysql.
У меня есть огромная база данных в csv, которая содержит, среди прочего, 3 столбца с разными форматами дат. Чтобы загрузить этот файл csv в мою базу данных, я должен установить три столбца даты как текст, иначе он не будет загружать их должным образом. Вот пример моих данных:
inDate, outDAte
19-01-10, 02-02-10
04-01-11 12:02, 2011-01-11 11:31
29-01-11 6:57, 29-03-2010
30-03-10, 01-04-2010
2012-12-03 05:39:27.040, 12-12-12 17:04
2012-12-04 13:47:01.040, 29-11-12
Я хочу их гомогенизировать и сделать 2 столбца каждого из них только с "датой" и другими только с "временем".
Я пробовал работать с "регулярными выражениями" и "case".
Когда я использовал "reg-выражения", я дал null и "case" дал мне "усеченное неправильное значение".
Я попытался найти что-то подобное в Интернете. Я обнаружил, что люди сталкиваются с подобными проблемами, но с двумя форматами дат не так много разных форматов, как я:
Я действительно новичок в этом, и я не знаю, как написать так много исключений в mysql.
Загрузите CSV во временную таблицу; массировать значения в этой таблице; наконец, скопируйте в "реальную" таблицу.
В каждой таблице должно быть по 2 столбца; один для необработанного значения, поступающего из CSV; другой - DATETIME(3)
(или независимо от того, какая будет санированная версия).
Сделайте один из них для каждого совершенно другого формата:
UPDATE tmp SET inDate = ...
WHERE raw_inDate REGEXP '...';
WHERE
могут потребоваться такие вещи, как AND LENGTH(inDate) = 8
и другие способы тестирования, отличные от REGEXP.
SUBSTRING_INDEX(inDate, '-',...)
может быть удобной функцией для разделения даты.
Но, действительно, я бы предпочел написать код на Perl или на каком-то другом реальном языке программирования.
02-02-10
в 2002 году? Или это в 2010 году? То есть что делать с неоднозначными ценностями?