我想知道从表字段upload_date
到现在,执行查询时经过了多少时间。在阅读了MySQL的一些功能后,我尝试了但并不是那么幸运。
如果小于24小时,有没有办法以小时为单位返回值,如果是100天或更短,是否以天为单位返回?否则我将不得不在PHP中编写代码。
日期为CURRENT TIME STAMP格式,只是为了清除它。
我试过了:
SELECT DATE_SUB(NOW(), upload_date) FROM is_meeting_files
我也试过这个,但它给出了0秒的差异:
SELECT DATEDIFF(CURDATE(), upload_date) AS intval FROM is_meeting_files LIMIT 0,5;
答案 0 :(得分:4)
您可以相互减去unix时间戳值:
SELECT unix_timestamp(NOW()) - unix_timestamp(upload_date) from is_meeting_files;
答案 1 :(得分:1)
你可以这样做:
SELECT
IF (TIMESTAMPDIFF(HOUR, upload_date, NOW()) <= 24,
CONCAT(TIMESTAMPDIFF(HOUR, upload_date, NOW()), ' hours'),
IF (TIMESTAMPDIFF(DAY, upload_date, NOW()) <= 100,
CONCAT(TIMESTAMPDIFF(DAY, upload_date, NOW()), ' days'),
CONCAT(TIMESTAMPDIFF(MONTH, upload_date, NOW()), ' months'),
)
) as diff
FROM is_meeting_files;
当差异小于24小时时,这将返回“n小时”;如果差异小于100天,则返回“n天”;当差异超过100天时,返回“n个月”。
从我的观点来看,在SQL中执行所有这些操作是一个坏主意,因为这种查询无法缓存,因为您认为它不是那么灵活。所以,我建议你在PHP端生成这个。