在MYSQL中不兼容时自动更改数据
我试图在MYSQL中创建一个电影数据库(我使用MYSQL工作台) 我使用txtomy将imdb.com生成的ratings.csv文件导入MYSQL 现在的问题是,819部电影中有16部无法导入,因为“发布日期”的格式不正确 此错误显示在日志中: (#22007)第1行“发布日期”列的日期值不正确:“1983-05”在MYSQL中不兼容时自动更改数据,mysql,date,alter,Mysql,Date,Alter,我试图在MYSQL中创建一个电影数据库(我使用MYSQL工作台) 我使用txtomy将imdb.com生成的ratings.csv文件导入MYSQL 现在的问题是,819部电影中有16部无法导入,因为“发布日期”的格式不正确 此错误显示在日志中: (#22007)第1行“发布日期”列的日期值不正确:“1983-05” 现在我想知道是否有办法改变MYSQL中的表,自动将格式为YYYY-MM的任何日期更改为YYYY-MM-DD,DD为00或其他形式。或者说,这也可以接受不同格式的日期。我不太清楚tx
现在我想知道是否有办法改变MYSQL中的表,自动将格式为YYYY-MM的任何日期更改为YYYY-MM-DD,DD为00或其他形式。或者说,这也可以接受不同格式的日期。我不太清楚
txtomy
,但是如果您必须使用它,并且如果它不允许您实现像上面建议的didierc这样的解决方案,那么一个选项就是添加一个用于导入原始日期的VARCHAR列,并使用触发器更新“real”date列
假设您的表名为MOVIES
ALTER TABLE MOVIES ADD (RawDateFromIMDB VARCHAR(10));
然后将txtomy
定义更改为从IMDB导入rawdate
,而不是release\u 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,即可完成。如果文件是规则生成的,则使用regexp生成一个小脚本来更改中断的日期。我认为这不应该放在Mysql中。