2014-05-09 164 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

相關問題