2011-08-23 92 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

相关问题