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

如何查询创建日期满2年的记录及编写MS SQL删除语句?

没问题,我来帮你搞定这两个MS SQL的日期处理需求,都是日常开发里很常见的场景~

查找单条记录创建日期起两年内的相关记录

假设你已经通过user_id或其他条件定位到了目标记录,我们可以分两步来实现筛选:

  1. 先获取目标记录的创建日期
    先拿到这条记录的created_date基准值,比如目标用户的user_id是100:

    SELECT created_date 
    FROM users 
    WHERE user_id = 100;
    
  2. 基于基准日期筛选两年范围的记录

    • 如果你要找从这条记录创建日期开始往后两年内的所有记录,用DATEADD计算基准日期的两年后时间,再做范围筛选:
      SELECT *
      FROM users
      WHERE created_date BETWEEN (SELECT created_date FROM users WHERE user_id = 100)
                            AND DATEADD(year, 2, (SELECT created_date FROM users WHERE user_id = 100));
      
    • 如果你需要的是**与这条记录创建日期相差两年以内(前后都包含)**的记录,调整条件为:
      SELECT *
      FROM users
      WHERE created_date BETWEEN DATEADD(year, -2, (SELECT created_date FROM users WHERE user_id = 100))
                            AND DATEADD(year, 2, (SELECT created_date FROM users WHERE user_id = 100));
      
    • 嫌嵌套查询麻烦的话,也可以把目标日期存到变量里,让代码更清晰:
      DECLARE @target_date DATETIME;
      SET @target_date = (SELECT created_date FROM users WHERE user_id = 100);
      
      SELECT *
      FROM users
      WHERE created_date BETWEEN @target_date AND DATEADD(year, 2, @target_date);
      
删除users表中创建日期距今2年及以上的数据

这个需求的核心是计算当前日期往前推两年的时间点,再删除早于/等于该时间点的记录,不过一定要注意操作安全!

第一步:先确认要删除的记录(重中之重!)

执行删除前,务必先查询验证哪些数据会被删掉,避免误删重要数据:

SELECT user_id, user_name, created_date
FROM users
WHERE created_date <= DATEADD(year, -2, GETDATE());

第二步:执行删除操作

如果查询结果完全符合预期,再运行删除语句:

DELETE FROM users
WHERE created_date <= DATEADD(year, -2, GETDATE());

安全操作小建议

  • 可以用事务来做测试,没问题再提交,出错了直接回滚:
    BEGIN TRANSACTION;
    DELETE FROM users WHERE created_date <= DATEADD(year, -2, GETDATE());
    -- 查看删除的行数,确认数量是否合理
    SELECT @@ROWCOUNT;
    -- 没问题就提交,有问题就回滚
    -- COMMIT;
    -- ROLLBACK;
    
  • 执行删除前记得备份数据,永远不要在生产环境直接跑未验证的删除语句!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:34:35