MySQL Epoch时间排序需求:需按接近当前时间排序的技术咨询
问题描述
我从MySQL数据库读取存储为Unix时间戳(Epoch)的time字段,当前使用的SQL语句为:
SELECT * FROM `tables` ORDER BY `time` DESC LIMIT 20
数据库中的示例数据如下:
| id | time |
|---|---|
| 01 | 1664898681 |
| 02 | 1664898561 |
| 03 | 1664898501 |
当前在Discord中显示的排序结果(转换为相对时间后):
01 | in 10 minutes 02 | in 9 minutes 03 | in 8 minutes 04 | 23 minutes ago
我需要将数据按照离当前时间最近的顺序排序,期望的排序结果为:
01 | in 8 minutes 02 | in 9 minutes 03 | in 10 minutes 04 | 23 minutes ago
解决方案
要实现按时间戳与当前时间的距离从小到大排序,只需计算每条记录的time与当前时间戳的差值绝对值,再按该值升序排列即可。
修改后的SQL语句:
SELECT * FROM `tables` ORDER BY ABS(`time` - UNIX_TIMESTAMP()) ASC LIMIT 20;
关键说明
UNIX_TIMESTAMP():MySQL内置函数,直接返回当前时间的Unix时间戳。ABS(time- UNIX_TIMESTAMP()):计算目标时间与当前时间的时间差绝对值,值越小代表离当前时间越近。ORDER BY ... ASC:按时间差绝对值从小到大排序,就能让离当前最近的记录排在最前面,不管是未来还是过去的时间。
内容的提问来源于stack exchange,提问作者Bonjour
相关产品推荐
相关产品推荐

