Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MYSQL中不兼容时自动更改数据_Mysql_Date_Alter - Fatal编程技术网

在MYSQL中不兼容时自动更改数据

在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中创建一个电影数据库(我使用MYSQL工作台)

我使用txtomy将imdb.com生成的ratings.csv文件导入MYSQL

现在的问题是,819部电影中有16部无法导入,因为“发布日期”的格式不正确

此错误显示在日志中:

(#22007)第1行“发布日期”列的日期值不正确:“1983-05”


现在我想知道是否有办法改变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中。