如何设置NULL为datetime与0000-00-00 00:00:00值?

时间:2015-09-28 18:30:06

标签: mysql sql datetime sql-update

我需要在我的数据库上更改一些值。

我忘了将nullable设置为表,默认情况下设置为0000-00-00 00:00:00。

现在我需要在NULL中转换该值。

字段类型是日期时间。

我该怎么做?

我尝试使用典型的Update table set field = NULL WHERE field = '0000-00-00 00:00:00';,但它不起作用。

5 个答案:

答案 0 :(得分:6)

您需要首先使列可以为空:

ALTER TABLE mytable MODIFY COLUMN field DATETIME NULL;

然后更新值:

UPDATE mytable SET field = NULL WHERE field = '0000-00-00 00:00:00';

答案 1 :(得分:2)

从MySQL 5.7开始,SQL模式NO_ZERO_DATE使得无法进行此更新,除非您首先禁用此限制(仅在事务期间)。

SET sql_mode=(SELECT REPLACE(@@sql_mode,"NO_ZERO_DATE", ""));
UPDATE mytable SET field = NULL WHERE field = '0000-00-00 00:00:00';

答案 2 :(得分:1)

您需要首先使该列为可空:

@ Mysql5.7

错误:

update episodes set `ending` = NULL WHERE `ending` = '0000-00-00'

正确:

update episodes set `ending` = NULL WHERE `ending` = 0000-00-00

注意:从where子句中的日期值中删除引号。希望它能帮助到某人

答案 3 :(得分:0)

不幸的是,这不起作用 for:

update episodes set `ending` = NULL 
WHERE `ending` = '0000-00-00'

如果0000-00-00在where子句中,则会收到错误:

  

“1292 - 日期时间值不正确:'结尾'列''''   第1行“。

即使ending在字段定义中有NULLdefalut=null

答案 4 :(得分:0)

对我有用的是:

  1. 将字段从日期时间设置为 varchar(191)。
  2. 将 field = '0000-00-00 00:00:00' 的所有行更新为 NULL。
  3. 将该字段重新设置为日期时间。