更新MySQL查询以来的时间

时间:2011-10-06 17:32:06

标签: mysql mysqli

我的表中包含与2011-10-05 08:09:00.000类似的时间戳,以下查询引用reg_date,mid_date,pre_date来查询。我没有显示时间戳,而是显示23 mins ago而不是2011-10-05 08:09:00.000。我尝试了一些功能,例如timediff()format()。我想在查询中完成所有这一切,以便我不必查询和处理结果。

也许我不太了解这个manaul,但我确信有办法完成这个。我是MySQL查询语句的新手。我看到了很多潜在和节省时间。我只需要一些帮助即可完成任务。

select reg_price as regPrice, _id as ID, lat, lng, reg_date as regDate, 
                mid_date as midDate, pre_date as preDate, 
                format((acos(sin(radians(39.9891)) * sin(radians(lat)) + cos(radians(39.9891)) *
                cos(radians(lat)) * cos(radians(-82.8116) - radians(lng))) * 6378),1)
                as distance from stationDetails where (acos(sin(radians(39.9891)) 
                * sin(radians(lat)) + cos(radians(39.9891)) * cos(radians(lat)) * 
                cos(radians(-82.8116) - radians(lng))) * 6378) <= 3 order by reg_price asc, reg_price asc

2 个答案:

答案 0 :(得分:1)

使用TIMEDIFF()TIME_FORMAT()您应该能够显示X分钟前的结果。根据您需要处理不同时间尺度(小时,天等)的方式,根据需要将其修改为其他时间值应该很容易:

select
    TIME_FORMAT(
        TIMEDIFF(now(), dt)
        ,'%i minute(s) ago'
    )
from Data;

演示:http://sqlize.com/r1mlXcM62V

答案 1 :(得分:0)

这个为时间跨度构建的功能类似于SOF。

DELIMITER $$

DROP FUNCTION IF EXISTS `GetTimeDisplay2` $$

CREATE FUNCTION `GetTimeDisplay2` (GivenTimestamp TIMESTAMP)

RETURNS VARCHAR(32)

DETERMINISTIC

BEGIN    

    DECLARE rv VARCHAR(32);

    DECLARE diff BIGINT;    

    SET diff = UNIX_TIMESTAMP()-UNIX_TIMESTAMP(GivenTimestamp);

        IF diff < 0 THEN

        SET rv = CONCAT(abs(diff/60),' From Now');

    END IF;

    IF diff = 0 THEN

        SET rv = 'Just Now';

    END IF;

    IF diff = 1 THEN

        SET rv = '1 sec ago';

    END IF;

    IF diff BETWEEN 2 AND 60 THEN

        SET rv = CONCAT(FORMAT(diff, 0), ' secs ago');

    END IF;

    IF diff BETWEEN 120 AND 3599 THEN

        SET rv = CONCAT(FORMAT(diff/60, 0), ' mins ago');

    END IF;

    IF diff BETWEEN 61 AND 119 THEN

        SET rv = CONCAT(FORMAT(diff/60, 0), ' min ago');

    END IF;

    IF diff = 3600 THEN

        SET rv = CONCAT(FORMAT(diff/3600, 0), ' hr ago');

    END IF;

    IF diff BETWEEN 3601 AND 86399 THEN

        SET rv = CONCAT(FORMAT(diff/3600, 0), ' hrs ago');

    END IF;

    IF diff > 86400 THEN

        SET rv = DATE_FORMAT(GivenTimestamp, '%a %l:%i %p');

    END IF;

    IF diff > 259200 THEN

        SET rv = DATE_FORMAT(GivenTimestamp, '%b %e at %l:%i %p');

    END IF;

    RETURN rv;

END $$

DELIMITER ;