Mysql 以分钟为单位计算两个日期之间的时间差

Mysql 以分钟为单位计算两个日期之间的时间差,mysql,sql,timestamp,Mysql,Sql,Timestamp,我的MySQL数据库中有一个时间戳字段,它映射到我的bean中的DATE数据类型。现在我需要一个查询,通过该查询可以获取数据库中当前时间戳与数据库中存储的时间戳之间的差异大于20分钟的所有记录 我怎么做 我想要的是: SELECT * FROM MyTab T WHERE T.runTime - now > 20 minutes 有没有MySQL函数,或者在SQL中有什么方法可以做到这一点?我想您可以使用类似 试试这个: select * from MyTab T where date

我的MySQL数据库中有一个时间戳字段,它映射到我的bean中的
DATE
数据类型。现在我需要一个查询,通过该查询可以获取数据库中当前时间戳与数据库中存储的时间戳之间的差异大于20分钟的所有记录

我怎么做

我想要的是:

SELECT * FROM MyTab T WHERE T.runTime - now > 20 minutes
有没有MySQL函数,或者在SQL中有什么方法可以做到这一点?

我想您可以使用类似

试试这个:

select * from MyTab T where date_add(T.runTime, INTERVAL 20 MINUTE) < NOW()

UNIX_TIMESTAMP()函数返回当前的UNIX时间戳。

我使用下面的代码表示今天和数据库日期

ROUND(time_to_sec((TIMEDIFF(NOW(), "2015-06-10 20:15:00"))) / 60);
时间差(分钟,T.runTime,NOW())>20

,第一个参数可以是以下任一参数:

MICROSECOND
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR

您是否真的要选择时间戳至少为20分钟的记录?因为这就是你查询中的条件所说的。我不知道MySQL的优化器是否足够聪明,能够自己做到这一点,但根据一般原则,我将第一个条件重写为
t.runTime
。为什么你认为重写的条件比初始条件快?可能不是,如果MySQL足够聪明,但一般来说,如果您在
t.col
上有一个索引,那么
t.col
应该比
invfunc(t.col)
快,因为DB可以预先计算右侧并使用索引。@IlmariKaronen如果我使用
MINUTES
,这对我来说是失败的,但如果我使用
MINUTE
,它就可以工作。每
分钟
预计为5.5版中的
DATE\u ADD
DATE\u SUB
MINUTES
在其他版本中有效吗?@Andrew:没错,应该是
INTERVAL 20分钟
。我无法再编辑我的评论来修复它,但我可以(而且刚刚)编辑答案。从MyTab t中选择*其中TIMESTAMPDIFF(分钟,t.runTime,NOW())>20(t.runTime是MyTab表的coulmn)它不包括第二个,只显示分钟的差异,因为%60您忽略了大于一小时的差异…@SparK是正确的,删除%60,否则在90分钟内您只能得到30。
ROUND(time_to_sec((TIMEDIFF(NOW(), "2015-06-10 20:15:00"))) / 60);
MICROSECOND
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR