2013-03-25 2 views
0

MYSQL에서 영화 데이터베이스를 만들려고합니다 (MYSQL Workbench를 사용합니다).MYSQL에서 호환되지 않는 경우 데이터 자동 변경

imdb.com에서 생성 한 ratings.csv 파일을 MYSQL로 가져 오려면 TxtToMy (link)을 사용합니다.

이제 'date_released'가 올바른 형식이 아니기 때문에 81 영화 중 16 개 영화를 가져올 수 없다는 문제가 있습니다.

(# 22007) 잘못된 날짜 값이 : '1983-05'궁금 이제 행 1

에서 열 '출시일'에 대한이있는 경우

이 오류는 로그에 표시 MYSQL의 테이블을 변경하여 YYYY-MM 형식을 YYYY-MM-DD 형식으로 변경하고 DD가 00 또는 그 이상이되도록하십시오. 또는 다른 형식의 날짜도 허용합니다.

+0

수작업으로 csv를 편집하면 완료됩니다. 파일이 규칙적으로 생성 된 경우 정규 표현식을 사용하여 작은 스크립트를 작성하여 깨진 날짜를 변경하십시오. 나는 이것이 MySQL에 있어야한다고 생각하지 않는다. – didierc

답변

0

나는 아주 잘 TxtToMy 모르지만, 당신이 didierc 위의 제안처럼 당신이 솔루션을 구현하는 것을 허용하지 않을 경우, 를 사용하는 경우, 다음 하나의 옵션은 VARCHAR 열을 추가하는 것입니다 원시 날짜를 가져오고 트리거를 사용하여 "실제"날짜 열을 업데이트합니다.

이 테이블은

ALTER TABLE MOVIES ADD (RawDateFromIMDB VARCHAR(10)); 

그런 다음 RawDateFromIMDB 대신 release_date로 가져 오기 위해 TxtToMy 정의를 변경 ... MOVIES라는 가정하면.

이 트리거는 원시 일을하고 release_date 열을 업데이트하는 데 사용됩니다

CREATE TRIGGER Movie_RawDateParse 
    BEFORE INSERT ON Movies 
    FOR EACH ROW 
BEGIN 
    SET NEW.release_date = str_to_date(NEW.RawDateFromIMDB, '%Y-%m-%d'); 
END; 

MySQL은 그래서이 날 때 근무 '1983-05-00'와 같은 날짜를 완벽하게 행복해 보인다 1983-05RawDateFromIMDB에 '가져 왔습니다'. 또한 아래에서 볼 수 있듯이 "정규"날짜에 근무했습니다.

mysql> INSERT INTO Movies (RawDateFromIMDB) values ('1983-05'); 
Query OK, 1 row affected (0.03 sec) 

mysql> INSERT INTO Movies (RawDateFromIMDB) values ('1983-06-22'); 
Query OK, 1 row affected (0.04 sec) 

mysql> SELECT release_date, RawDateFromIMDB FROM Movies; 
+--------------+-----------------+ 
| release_date | RawDateFromIMDB | 
+--------------+-----------------+ 
| 1983-05-00 | 1983-05   | 
| 1983-06-22 | 1983-06-22  | 
+--------------+-----------------+ 
2 rows in set (0.00 sec) 
관련 문제