Время с момента обновления MySQL Query - PullRequest
1 голос
/ 06 октября 2011

У меня есть таблица, заполненная временными метками, похожими на 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().Я хотел бы завершить все это в запросе, чтобы мне не пришлось запрашивать и обрабатывать результаты.

Возможно, я не очень хорошо понимаю мануал, но я уверен, что есть способ завершить это.Я действительно новичок в запросе 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 ]

1 голос
/ 06 октября 2011

Используя TIMEDIFF() и TIME_FORMAT(), вы сможете отображать результаты, как X минут назад. Это должно быть легко изменить для других значений времени по мере необходимости, в зависимости от того, как вы хотите работать с различными временными шкалами (часами, днями и т. Д.):

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

Демо: http://sqlize.com/r1mlXcM62V

0 голосов
/ 10 октября 2011

Эта функция была построена для промежутка времени, аналогичного 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 ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...