我尝试从 MySQLNOW()
函数中获取相对日期和时间,(比如 2 秒前、3 天前、12 月 31 日......)但我不知道如何!有任何想法吗?太感谢了!
user2475897
问问题
597 次
2 回答
3
使用TIMESTAMPDIFF()
功能。参见示例:
SELECT
TIMESTAMPDIFF(SECOND, `stamp_column`, NOW()) as `seconds`
FROM
`YourTable`
或者使用这个存储的函数:
CREATE FUNCTION `PassedSince`(`stamp` TIMESTAMP)
RETURNS VARCHAR(100)
DETERMINISTIC
BEGIN
DECLARE `result` VARCHAR(100) DEFAULT '';
DECLARE `seconds`, `minutes`, `hours`, `days` INT;
SET `seconds` = TIMESTAMPDIFF(SECOND, `stamp`, NOW());
SET `days` = `seconds` DIV (24 * 60 * 60);
SET `seconds` = `seconds` MOD (24 * 60 * 60);
IF `days` > 0
THEN SET `result` = CONCAT(`result`, `days`, ' Days ');
END IF;
SET `hours` = `seconds` DIV (60 * 60);
SET `seconds` = `seconds` MOD (60 * 60);
IF `hours` > 0
THEN SET `result` = CONCAT(`result`, `hours`, ' Hours ');
END IF;
SET `minutes` = `seconds` DIV 60;
SET `seconds` = `seconds` MOD 60;
IF `minutes` > 0
THEN SET `result` = CONCAT(`result`, `minutes`, ' Minutes ');
END IF;
IF `seconds` > 0
THEN SET `result` = CONCAT(`result`, `seconds`, ' Seconds ');
END IF;
RETURN TRIM(`result`);
END
查询:
SELECT
`PassedSince`('2013-06-19 08:00') as `result`
UNION ALL
SELECT
`PassedSince`('2013-01-01 00:00')
显示:
result
--------------------------------------
1 Hours 20 Minutes 55 Seconds
169 Days 9 Hours 20 Minutes 55 Seconds
于 2013-06-19T02:40:57.417 回答
0
您必须事先指定时间,或者在您的情况下指定秒数。
让我通过基于 PDO-Mysql 查询的简单示例来说明我的意思
$time = '0:01:00'; // one minute
$stmt = $conn->prepare("SELECT chat_user FROM chatters
WHERE TIMEDIFF(NOW(), login_time) < TIME (?) );
在上面的示例中,如果您使用查询,您实际上将搜索登录时间小于$time
或01:00:00
于 2013-06-19T02:43:16.690 回答