You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么MySQL中SET搭配CONVERT/CAST更新表日期字段不生效

问题成因
  • 字段类型限制:你当前SaleDate字段的类型为DATETIME,本身默认存储「日期+时间」两部分信息。即便你用CAST/CONVERT将值转为DATE格式,写入DATETIME字段时,MySQL会自动给日期补全00:00:00的时间部分,若原数据的时间部分本身就是全零,更新前后值完全一致,MySQL会自动跳过无变更的行,返回影响行数为0,看起来就像更新失效。
  • 事务未提交:若你手动开启了数据库事务,执行完UPDATE语句后没有执行COMMIT操作,变更只会存在于当前会话的临时空间,不会实际写入表中,其他会话也看不到变更结果。
解决办法

根据你的实际需求选择对应方案即可:

方案1:仅需清空时间部分,保留DATETIME字段类型

  1. 先验证更新是否实际生效,执行查询语句对比前后值:
SELECT SaleDate, CAST(SaleDate AS DATE) AS converted_date FROM nashhousing LIMIT 10;
  1. 若确认更新未持久化,手动提交事务即可:
COMMIT;
  1. 校验最终结果,执行以下查询,返回空则说明所有行的时间部分已经清零:
SELECT * FROM nashhousing WHERE TIME(SaleDate) != '00:00:00';

方案2:彻底去掉时间部分,字段仅存储日期

直接修改字段类型即可,无需提前执行UPDATE操作,MySQL会自动完成值的转换:

ALTER TABLE nashhousing MODIFY COLUMN SaleDate DATE;

注意:执行改表操作前请务必备份数据,若表数据量较大,改表会触发锁表,建议选择业务低峰期执行。

内容的提问来源于stack exchange,提问作者Marcus Chan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 17:09:01