我在MySQL Server 5.1中創建了一個存儲過程。將時間戳轉換爲X天X小時X分鐘前
如何將時間戳轉換爲代表該時間戳與現在時間之間的天數,小時數和分鐘差的字符串?
例如,如果時間戳是5小時,3分鐘前我會'5小時3分鐘前'。
我在MySQL Server 5.1中創建了一個存儲過程。將時間戳轉換爲X天X小時X分鐘前
如何將時間戳轉換爲代表該時間戳與現在時間之間的天數,小時數和分鐘差的字符串?
例如,如果時間戳是5小時,3分鐘前我會'5小時3分鐘前'。
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
看一看日期和時間功能MySQL參考頁在
http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_from-unixtime
編輯:既然我假設你正在使用Unix的時間戳,要走的路是
FROM_UNIXTIME(timestamp, format)
我得到空當我嘗試執行此功能。除此之外,如果它是在3分鐘前創建的,我不想寫入0小時。只有3分鐘前沒有小時字符串。 – ufk
真棒!非常感謝! – ufk
只需要注意,對於大於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