2013-03-25 31 views
0

我試圖在MYSQL中創建一個電影數據庫(我使用MYSQL工作臺)。在MYSQL中不兼容時自動更改數據

我使用TxtToMy (link)將imdb.com生成的ratings.csv文件導入到MYSQL中。

現在的問題是,由於'date_released'的格式不正確,因此無法導入16部電影(總計819個)。

此錯誤顯示在日誌中:

(#22007)不正確的日期值: '1983年至1905年' 在第1行

現在列 'RELEASE_DATE' 我不知道是否有方式來更改MYSQL中的表格,以便自動將YYYY-MM格式的任何日期更改爲YYYY-MM-DD,DD爲00或其他值。或者也可以接受不同格式的日期。

+0

只需手工編輯csv,就完成了。如果文件是定期生成的,則使用正則表達式創建一個小腳本來更改中斷日期。我不認爲這應該放在Mysql中。 – didierc 2013-03-25 19:26:28

回答

0

我不知道TxtToMy非常好,但是如果你要使用它,如果它不會讓你像上面提出didierc實現一個解決方案,那麼一個辦法是增加一個VARCHAR列用於導入原始日期並使用觸發器更新「真實」日期列。

假設您的表名爲MOVIES ...

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

然後改變你的TxtToMy定義導入到RawDateFromIMDB而不是release_date

該觸發器將採取原始日期並使用它來更新您的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-05」的值「輸入」爲RawDateFromIMDB。它也適用於「常規」日期,如下所示:

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)