2014-09-22 3 views
0

Мне была дана задача чтения в TXT-файле в таблицу mySQL. Вот что я сделал.Проблема mysql при чтении в формате Date из файла .txt с str_to_date

CREATE TABLE PERSON(PIDM INT, FNAME VARCHAR(20), LNAME VARCHAR(20), SSN INT(8), DOB DATE, GENDER CHAR(2)); 

LOAD DATA LOCAL INFILE '/pathtoTextFile' 
    INTO TABLE PERSON 
    FIELDS TERMINATED BY ', ' 
    LINES TERMINATED BY '\n' 
    IGNORE 1 ROWS 
    (PIDM, FNAME, LNAME, SSN, @DATE, GENDER) 
    SET DOB = STR_TO_DATE(@DATE, '%m-%d-%Y'); 

Но я получаю несколько предупреждений от этого. в том числе:

+---------+------+-----------------------------------------------------------------+ 
| Level | Code | Message               | 
+---------+------+-----------------------------------------------------------------+ 
| Warning | 1411 | Incorrect datetime value: '12/14/1957' for function str_to_date | 
| Warning | 1411 | Incorrect datetime value: '01/13/1969' for function str_to_date | 
| Warning | 1264 | Out of range value for column 'SSN' at row 3     | 
| Warning | 1411 | Incorrect datetime value: '02/14/1976' for function str_to_date | 
| Warning | 1366 | Incorrect integer value: '' for column 'SSN' at row 4   | 
| Warning | 1411 | Incorrect datetime value: '03/12/1989' for function str_to_date 

Я не мог понять, почему я получаю неверную дату из функции str_to_date/метода. Это должно быть учебное упражнение, но я был на нем как 2 часа и нигде не получил. У кого-нибудь есть какие-либо советы или какое-либо представление о том, что я делаю неправильно?

Спасибо

P.S. Цель состоит не в том, чтобы изменить файл .txt, чтобы он работал, но чтобы иметь возможность обрабатывать неверные входы.

+0

Вы считали символы между месяцем года? вы указали тире, но ошибки показывают слэш –

+0

Забавно, что я был уверен, что попытался переключить их на '/', но, видимо, я этого не сделал, и когда я вернулся, это сработало. Благодарю. Вот еще один вопрос: как указать значение NULL, если SSN не 8 мест? –

+0

'case when length (ssn) <> 8 then NULL else SSN end'; но вы должны указать, что на этот вопрос ответили, отметив ответ ниже –

ответ

0

Это зависит от исходных данных, но если есть смесь MM/DD/YYYY и MM-DD-YYYY, вы можете заменить нежелательный разделитель на желаемый разделитель, а затем преобразовать в дату.

Примечание: поскольку форматы Month First и Day First являются «неоднозначными» (например, 7/8/2014 может быть датой в июле или августе), их следует избегать, когда это возможно.

+0

спасибо, довольный, что я мог бы помочь. –