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