如何查询创建日期满2年的记录及编写MS SQL删除语句?
没问题,我来帮你搞定这两个MS SQL的日期处理需求,都是日常开发里很常见的场景~
查找单条记录创建日期起两年内的相关记录
假设你已经通过user_id或其他条件定位到了目标记录,我们可以分两步来实现筛选:
先获取目标记录的创建日期
先拿到这条记录的created_date基准值,比如目标用户的user_id是100:SELECT created_date FROM users WHERE user_id = 100;基于基准日期筛选两年范围的记录
- 如果你要找从这条记录创建日期开始往后两年内的所有记录,用
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
相关产品推荐
相关产品推荐

