#mysql
#mysql
Вопрос:
У уважаемого сэра есть таблица, в которой я беру столбец updatetime с типом данных datetime, а также по умолчанию он равен null. Теперь я хочу заменить некоторые значения с 0000-00-00 00:00: 0 на null, когда я пытаюсь выполнить запрос на обновление в phpmyadmin, он дает мне ввести описание изображения здесь.Пожалуйста, помогите мне, как обновить этот столбец.`
UPDATE tbl_table_time
set update_datetime = NULL
WHERE update_datetime = '0000-00-00 00:00:00'
ID Updatetime (Datatype datetime)
1 0000-00-00 00:00:00
2 2020-12-03 16:19:07
3 0000-00-00 00:00:00
4 2020-12-03 16:19:07
5 0000-00-00 00:00:00
6 0000-00-00 00:00:00
7 0000-00-00 00:00:00
Комментарии:
1. Пожалуйста, отправьте сообщение об ОШИБКЕ в виде текста, а не связанного изображения
Ответ №1:
Проблема не SET update_datetime = NULL
в том, а в WHERE update_datetime = '0000-00-00 00:00:00'
вашем запросе. Ошибка указывает на то, что 0000-00-00 00:00:00
это недопустимое значение Datetime, которое является правильным, поскольку это наименьшее возможное значение Datetime 1000-01-01 00:00:00
. Из-за этого MySQL не хочет сравнивать значения даты и времени. Чтобы преодолеть это, проще всего преобразовать Datetime в фактическую строку для сравнения. Вот пример запроса:
UPDATE tbl_table_time SET update_datetime = NULL WHERE CAST(update_datetime AS CHAR(20)) = '0000-00-00 00:00:00'
Имейте в виду, что это не очень эффективно и может занять некоторое время в больших базах данных. И поскольку 0000-00-00 00:00:00
это ошибочное состояние, его следует избегать, и вы должны проверить, как оно все равно оказалось в базе данных. MySQL автоматически преобразует недопустимые даты в это нулевое состояние, но это также можно отключить. Для получения более подробной информации см. https://dev.mysql.com/doc/refman/8.0/en/datetime.html