很多时候我们需要查询一些指定时间条件的数据,比如已过期的商品,即将过期的订单记录等等,这个时候mysql有一个函数个人觉得非常实用,这就是TIMESTAMPDIFF
TIMESTAMPDIFF(unit,begin,end);
该函数有三个参数。
unit:可以理解为end和begin做比较后取值的单位,比如DAY,SECOND,MINUTE等,它还有其他值(MICROSECOND,HOUR,WEEK,YEAR)。
后面两个参数和字面意思差不多,一个开始时间一个结束时间,运算结果是由结束时间减去开始时间所得,时间格式允许混合出现,比如begin是时间戳,end可以为格式化的时间。
这里我以我实际项目用到的地方举个简单例子,公司需求是要查出即将过期和已过期的服务器数据,距离过期还剩3天的视为即将过期,那么思路就是用表里面过期的时间减去现在的时间得到一个时间差,如果这个时间差小于零说明已经过期,如果小于3天,或者更精确,小于259200秒(3天的总时间秒数为:259200),并且大于零,那么这些数据视为即将过期,那么我们sql语句可以这样写。
查询已过期的数据,当然一般过期会专门用一个字段标识,我这里只是演示可以这样去查的一个思路 NOW()为当前时间。(expiration_time:表中过期时间字段,值的格式为,y-m-d H:i:s,如:2019-10-10 10:10:10)
select * from demo where TIMESTAMPDIFF(SECOND,NOW(),expiration_time)<0 //精确到秒,查询已过期数据
查询即将过期数据:
select * from demo where TIMESTAMPDIFF(SECOND,NOW(),expiration_time)>0 and TIMESTAMPDIFF(SECOND,NOW(),expiration_time)<259200