2014-05-09 122 views
0

我需要日期,小时和分钟两个日期之间的差异。当前日期(NOW())和结束日期。我需要他们在两个单独的查询工作有点不同。MySQL日期时间在天,小时和分钟上的差异

第一种需要以下面的格式返回它们作为一个单一的柱:

------------------------- 
|  time_left  | 
------------------------- 
| x days x hours x min | 
------------------------- 

第二个需要在三个单独的列返回它们中,确保其返回0 FO如果END_DATE每一列已超过当前日期:

------------------------------------------- 
| days_left | hrs_left | min_left | 
------------------------------------------- 
|  x  |  x  |  x  | 
------------------------------------------- 

我有一个解决方案,所有这一切,但它是可怕的。我相信有人发现至少有一个相对干净的解决方法。谢谢!

+0

对于第二个,看看'TIMEDIFF','TIME_TO_SEC'和'MAX(0,yourValue)'函数 –

回答

1

之前的一个是不准确的,显示应该有一个小时一天和3小时的差异。

这应该是准确的任何时间

SELECT 
    @diff:=ABS(UNIX_TIMESTAMP("2014-05-09 21:24:25") - UNIX_TIMESTAMP()) , 
    CAST(@days := IF(@diff/86400 >= 1, floor(@diff/86400),0) AS SIGNED) as days, 
    CAST(@hours := IF(@diff/3600 >= 1, floor((@diff:[email protected]@days*86400)/3600),0) AS SIGNED) as hours, 
    CAST(@minutes := IF(@diff/60 >= 1, floor((@diff:[email protected]@hours*3600)/60),0) AS SIGNED) as minutes, 
    CAST(@[email protected]*60 AS SIGNED) as seconds; 

解释:

  • 首先我们计算秒的绝对差异,并提出,在可变
  • 然后我们检查,如果我们得到一个或多个每天(小时分钟),如果是这样,我们计算如何得到并把这个变量放在一个变量
  • 之后的单位最大,我们也是这样做的,但首先我们从总体差异减去分配给前一个单位秒
  • 最后我们把一切留为最小单元,秒
+0

尽管它只能运行不到一年,但它仍然比我的好多了。谢谢 – Alternatex

+1

@alternatex更新了实际工作的查询 – Noino

相关问题