mysql - 如何将日期时间值从 0000-00-00 00:00:00 值更新为 null
问题描述
亲爱的先生有一个表,我在其中使用 datetime 数据类型的列 updatetime 并且默认情况下它为空。现在,当我尝试在 phpmyadmin 中执行更新查询时,我想将一些值从 0000-00-00 00:00:0 替换为 null,它会在此处输入图像描述。请帮助我如何更新此列。`
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
解决方案
问题不在于您的查询,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值。要克服这个问题,最简单的方法是将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
推荐阅读
- python - Python,一项测试影响另一项
- python-3.x - cluster_centers_ 的排序/索引在 KMeans 聚类 SKlearn 中代表什么
- mysql - Shopware Docker 无法登录 Docker MySQL 数据库
- postgis - 如何使用 AdonisJS 调用数据库函数?
- c - 使用 memcpy 将二维数组复制到新缓冲区
- angular8 - 将数据直接绑定到角度的 mat-checkbox
- botframework - LUIS - 发布到生产和登台
- ruby-on-rails - 如何比较rails中的今天日期和输入日期?
- html - html电子邮件模板表头对齐
- java - Spring for Kafka 2.3 如果消费者存在,则在运行时设置偏移量,否则创建一个新消费者