计算now()和timestamp字段之间的时间 - MySQL还是PHP?

时间:2013-12-20 11:36:41

标签: php mysql sql

我有一个名为ending的时间戳字段。我想计算从现在到现在的时间。

这是我正在尝试但结果只是说blob

select item_id, CONCAT(
FLOOR(HOUR(TIMEDIFF(now(), ending)) / 24), ' days, ',
MOD(HOUR(TIMEDIFF(now(), ending)), 24), ' hours, ',
MINUTE(TIMEDIFF(now(), ending)), ' minutes')
AS TimeDiff from items where item_id=39

或者我应该使用PHP代替?它们都在页面上广泛使用......我正在假设我已经在进行查询,然后将其包含在内,这比其他PHP调用更有效 - 但是,我可能是错的!

更新我为此做了一个fiddle并且它运行正常,那么为什么MySQL Workbench中的结果会说blob

这是表格解释:

item_id int(11) NO  PRI     auto_increment
user_id int(11) YES         
title   varchar(128)    YES         
price   decimal(10,2)   YES         
category    int(11) YES         
cat_parent  int(11) YES         
description varchar(1024)   YES         
item_condition  int(11) YES         
delivery    varchar(45) YES         
ending  timestamp   YES         
postcode    varchar(12) YES         
latitude    float(10,6) YES         
longitude   float(10,6) YES         
dateadded   timestamp   YES     CURRENT_TIMESTAMP   

2 个答案:

答案 0 :(得分:0)

将SELECT放在查询的开头?

SELECT CONCAT(
    FLOOR(HOUR(TIMEDIFF(now(), '2012-08-02 11:20')) / 24), ' days, ',
    MOD(HOUR(TIMEDIFF('2012-08-05 09:56', '2012-08-02 11:20')), 24), ' hours, ',
    MINUTE(TIMEDIFF('2012-08-05 09:56', '2012-08-02 11:20')), ' minutes, ',
    SECOND(TIMEDIFF('2012-08-05 09:56', '2012-08-02 11:20')), ' seconds')
AS TimeDiff

返回 34天,22小时,36分钟,0秒

答案 1 :(得分:0)

您也可以使用此查询 -

SELECT
  CONCAT(
    TIMESTAMPDIFF(DAY, ending, NOW()), ' days ',
    TIME_FORMAT(TIMEDIFF(TIME(NOW()), TIME(ending)), '%k hours %i minutes')
  ) TimeDiff
FROM items;

关于BLOB类型 - 由于CONCAT函数中使用的数据类型值不同,为避免这种情况,请使用CAST或CONVERT函数,例如: -

SELECT
  CAST(
    CONCAT(
      TIMESTAMPDIFF(DAY, ending, NOW()), ' days ',
      TIME_FORMAT(TIMEDIFF(TIME(NOW()), TIME(ending)), '%k hours %i minutes')
    ) AS CHAR
  )
  TimeDiff
FROM items;