【问题标题】:Comparing TIMEDIFF in MySQL比较 MySQL 中的 TIMEDIFF
【发布时间】:2017-05-09 06:05:48
【问题描述】:

我有以下数据:

ID   TIMEIN                 TIMEOUT
1    2016-08-24 20:44:00    2016-10-22 19:35:36
2    2016-08-24 20:58:00    2016-08-24 20:59:09

以及我想使用以下查询来查找 timediff 小于 50 小时的所有条目

SELECT TimeDiff(TimeOut,TimeIn) 
from table where TimeDiff(TimeOut,TimeIn) < '50:00:00' 

第二行应该返回,因为它小于 50 小时,但第一行,timediff 超过 50 小时也继续返回。

02:04:57
15:10:49
125:00:25

它返回所有类型的值,包括大于 50 的值

我应该使用什么查询?谢谢

【问题讨论】:

  • 您的输出似乎与您的示例数据不匹配,即输出中有三行,只有两个示例数据行,并且输出中的所有值都与您在应用 @ 后所期望的不匹配987654324@ 到样本数据。

标签: mysql sql date


【解决方案1】:

请尝试以下...

SELECT id,
       timeIn,
       timeOut,
       TIMEDIFF( timeOut,
                 timeIn ) AS timeDifference
FROM table
WHERE TIMESTAMPDIFF( SECOND,
                     timeOut,
                     timeIn ) > 180000;

此语句将输出每条记录的字段,其中两个时间日期之间的差异超过50 hours (or180000 秒`)。

如果您有任何问题或cmets,请随时发表相应的评论。

【讨论】:

  • 虽然所选答案对于所呈现的用例完全正确,但我更喜欢这个,因为在需要与分形小时值进行比较的情况下,它更通用。
  • 并且有一个陷阱:当参数以相同的顺序呈现时,TIMEDIFF 和 TIMESTAMPDIFF 会产生一个相反的符号。
【解决方案2】:

尝试获取小时差异,然后进行比较。

SELECT TimeDiff(TimeOut,TimeIn) 
from table where HOUR(TIMEDIFF(endDate, startDate)) < 50 

【讨论】:

  • 选择 a,b,c, a > 24, b > 24, b > 24, a > '24:00:00', b > '24:00:00', b > ' 24:00:00', a > '0.24:00:00', b > '0.24:00:00', b > '0.24:00:00' from (select TIMEDIFF('2020-01-31 22:00 :00', '2020-01-31 00:00:00') a, TIMEDIFF('2020-02-02 00:00:00', '2020-01-31 00:00:00') b, TIMEDIFF ('2020-02-01 22:00:00', '2020-01-31 00:00:00') c) t 使用 TIMESTAMPDIFF 是最好的解决方案。
猜你喜欢
  • 2012-01-23
  • 1970-01-01
  • 1970-01-01
  • 2020-11-21
  • 2011-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多