【SQL】MySql获取指定字段时间的前一天,后一天,并修改

一、背景

1、由于项目需要,测试项目的打卡签到;模拟连续签到数据,由于需要每次打完卡后,修改指定数据到前一天,
log表中记录到N条数据时,手动修改很是麻烦;
于是思考是否有相关sql函数可以处理,经搜索和实践,通过DATE_ADD(),DATE_SUB();函数可以实现

二、相关知识

MySQL 为日期增加一个时间间隔用date_add()函数
MySQL 为日期减去一个时间间隔用date_sub()函数

1:设置当前时间变量

SET @mytime=NOW();
SELECT @mytime;

在这里插入图片描述
2、增加一天

#加一天
SELECT DATE_ADD(@mytime, INTERVAL 1 DAY);

在这里插入图片描述

3、减少一天

#减一天
SELECT DATE_SUB(@mytime, INTERVAL 1 DAY);

在这里插入图片描述
4、其他时间段操作

#同理增加一小时,一分钟可以用:
SELECT DATE_ADD(@mytime, INTERVAL 1 HOUR); -- 增加一小时
SELECT DATE_ADD(@mytime, INTERVAL 1 MINUTE); -- 增加一分钟 
SELECT DATE_ADD(@mytime, INTERVAL 1 SECOND); -- 增加一秒钟
SELECT DATE_ADD(@mytime, INTERVAL 1 MICROSECOND);  -- 增加一微妙
SELECT DATE_ADD(@mytime, INTERVAL 1 WEEK);  -- 增加一星期
SELECT DATE_ADD(@mytime, INTERVAL 1 MONTH);  -- 增加一个月
SELECT DATE_ADD(@mytime, INTERVAL 1 QUARTER); -- 增加一季(三个月)

#减少一小时,一分钟可以用:
SELECT DATE_SUB(@mytime, INTERVAL 1 HOUR); -- 减少一小时
SELECT DATE_SUB(@mytime, INTERVAL 1 MINUTE); -- 减少一分钟 
SELECT DATE_SUB(@mytime, INTERVAL 1 SECOND); -- 减少一秒钟
SELECT DATE_SUB(@mytime, INTERVAL 1 MICROSECOND);  -- 减少一微妙
SELECT DATE_SUB(@mytime, INTERVAL 1 WEEK);  -- 减少一星期
SELECT DATE_SUB(@mytime, INTERVAL 1 MONTH);  -- 减少一个月
SELECT DATE_SUB(@mytime, INTERVAL 1 QUARTER); -- 减少一季(三个月)

三、具体业务解决

1、日志表中记录每一天的打卡记录和天数每次模拟前一天,需要手动修改,比较麻烦和费时;
修改前:
在这里插入图片描述

2、通过指定时间字段,再结合上面的时间函数,即可全局修改

UPDATE xxx_log.`consecutive_sign_log` SET sign_time = DATE_SUB(sign_time, INTERVAL 1 DAY) WHERE user_id = 'xxx29775';

修改后:
在这里插入图片描述

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值