2011-08-23 150 views
3

我在MySQL Server 5.1中創建了一個存儲過程。將時間戳轉換爲X天X小時X分鐘前

如何將時間戳轉換爲代表該時間戳與現在時間之間的天數,小時數和分鐘差的字符串?

例如,如果時間戳是5小時,3分鐘前我會'5小時3分鐘前'。

回答

7
select date_format(timediff(current_timestamp,last_timestamp), 
'%k hours, %i minutes, %s seconds ago'); 

如果你想要更多的奢侈品,你可以做類似:

select concat 
    (
    if(date_format(timediff(ts1,ts2)'%k')='0' 
    ,'',date_format(timediff(ts1,ts2)'%k hours'), 
    if(date_format(timediff(ts1,ts2)'%i')='0' 
    ,'',date_format(timediff(ts1,ts2)'%k minutes'), 
    if(date_format(timediff(ts1,ts2)'%s')='0' 
    ,'',date_format(timediff(ts1,ts2)'%k seconds') 
) 

再加上一些額外的空間在這裏和那裏。
如果其中一個時間戳記爲null自然結果也將爲空,您必須確保它不是,或使用ifnull(`timestamp`,now())來解決該問題。

參見:http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_timediff

+0

我得到空當我嘗試執行此功能。除此之外,如果它是在3分鐘前創建的,我不想寫入0小時。只有3分鐘前沒有小時字符串。 – ufk

+0

真棒!非常感謝! – ufk

+0

只需要注意,對於大於35天的時間差異,'TIMEDIFF'函數將[只返回最大838:59:59](http://dev.mysql.com/doc/refman/5.7/en /time.html)。有關詳細信息,請參見[本文](http://www.microshell.com/database/mysql/getting-around-mysql-timediff-maximum-value-of-8385959/)。 – JYelton

相關問題