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

新手上路,请多包涵

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

我该怎么做?

我想要的是:

 SELECT * FROM MyTab T WHERE T.runTime - now > 20 minutes

是否有任何 MySQL 函数,或者在 SQL 中执行此操作的任何方法?

原文由 Akshay 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 605
1 个回答

如果您的 MySql 版本早于 5.6,则您没有 TIMESTAMPDIFF。所以,我写了我自己的 MySql 函数来做到这一点。接受 %i 或 %m 分钟和 %h 小时。你可以扩展它。

使用示例:

  SELECT MYTSDIFF('2001-01-01 10:44:32', '2001-01-01 09:50:00', '%h')

功能就到这里了。享受:

  DROP FUNCTION IF EXISTS MYTSDIFF;

 DELIMITER $$
 CREATE FUNCTION `MYTSDIFF`( date1 timestamp, date2 timestamp, fmt varchar(20))
 returns varchar(20) DETERMINISTIC

 BEGIN

     declare secs smallint(2);
     declare mins smallint(2);
     declare hours int;
     declare total real default 0;
     declare str_total varchar(20);

     if date1 > DATE_ADD( date2, interval 30 day) then
       return '999999.999'; /* OUT OF RANGE TIMEDIFF */
     end if;

     select cast( time_format( timediff(date1, date2), '%s') as signed) into secs;
     select cast( time_format( timediff(date1, date2), '%i') as signed) into mins;
     select cast( time_format( timediff(date1, date2), '%H') as signed) into hours;

     set total = hours * 3600 + mins * 60 + secs;

     set fmt = LOWER( fmt);

     if fmt = '%m' or fmt = '%i' then
       set total = total / 60;
     elseif fmt = '%h' then
       set total = total / 3600;
     else
       /* Do nothing, %s is the default: */
       set total = total + 0;
     end if;

     select cast( total as char(20)) into str_total;

     return str_total;

 END$$
 DELIMITER ;

原文由 Sergio Abreu 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题