web-dev-qa-db-ja.com

0000-00-00 00:00:00の値で日時をNULLに設定するにはどうすればよいですか?

DBのいくつかの値を変更する必要があります。

テーブルにnullableを設定するのを忘れてしまい、デフォルトで0000-00-0000:00:00に設定されました。

次に、その値をNULLに変換する必要があります。

フィールドタイプは日時です。

どうすればいいですか?

典型的なUpdate table set field = NULL WHERE field = '0000-00-00 00:00:00';で試してみましたが、うまくいきません。

9
Borja Pombo

最初に列をNULL可能にする必要があります。

ALTER TABLE mytable MODIFY COLUMN field DATETIME NULL;

次に、値を更新します。

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

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
AlterPHP

残念ながら、これは機能しません。
にとって:

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

0000-00-00がwhere句にある場合、次のエラーが発生します。

「1292-日付時刻の値が正しくありません:行1の「終了」列の「0000-00-00」」。

endingのフィールド定義にNULLdefalut=nullがある場合でも。

0

最初に列をNULL可能にする必要があります。

@ Mysql5.7

間違っています:

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

正解:

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

注:where句の日付値から引用符を削除してください。それが誰かを助けることを願っています

0
A. Sideeq