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

如何在SQL中仅通过日期删除DateTime类型字段对应的记录

解决方案

核心逻辑为忽略DateTime类型的时间部分,精准匹配目标日期全时段的记录即可,以下是不同场景的实现方案:

通用兼容写法(全数据库适配,优先推荐)

不依赖数据库专属函数,且可利用日期时间字段上的索引,性能最优,适合所有场景:

DELETE FROM 你的表名
WHERE 日期时间字段名 >= '2021-11-02'
AND 日期时间字段名 < '2021-11-03';

逻辑说明:匹配所有大于等于目标日期0点、小于目标日期后一天0点的记录,刚好覆盖目标日期的全部时间段,不会漏删也不会多删。

各数据库专属简化写法

无需跨库兼容的场景下可以使用,写法更直观:

  • MySQL/MariaDB 写法
DELETE FROM 你的表名
WHERE DATE(日期时间字段名) = '2021-11-02';

注意:该写法会对字段做函数转换,导致索引失效,数据量较大时性能不如通用范围查询

  • SQL Server 写法
DELETE FROM 你的表名
WHERE CAST(日期时间字段名 AS DATE) = '2021-11-02';
  • PostgreSQL 写法
DELETE FROM 你的表名
WHERE 日期时间字段名::DATE = '2021-11-02';
  • Oracle 写法
DELETE FROM 你的表名
WHERE TRUNC(日期时间字段名) = DATE '2021-11-02';

操作前必看注意事项

  • 先执行SELECT验证待删除记录是否正确,避免误删:
SELECT * FROM 你的表名
WHERE 日期时间字段名 >= '2021-11-02' AND 日期时间字段名 < '2021-11-03';
  • 生产环境操作建议开启事务,确认无误后再提交:
-- 以MySQL为例
BEGIN;
DELETE FROM 你的表名 WHERE 日期时间字段名 >= '2021-11-02' AND 日期时间字段名 < '2021-11-03';
-- 确认删除数量正确后执行提交
COMMIT;
-- 误删可执行回滚
ROLLBACK;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:54:04