SQL中按epoch、hhmmss排序均无正确输出,需按时间顺序排列
解决SQL按时间先后排序异常的问题
常见问题及修复方案
- epoch时间戳排序失效:如果你的epoch字段存的是字符串(而非数值类型),直接
ORDER BY会按字符顺序排序,比如"1690000000"会排在"999999999"后面。解决办法是转成数值类型再排序:SELECT * FROM 你的表名 ORDER BY CAST(epoch字段名 AS BIGINT) ASC; - hhmmss字段排序混乱:要是hhmmss是短格式字符串(比如用
"830"代替"000830"),字符串排序会出现"100000"排在"90000"前面的情况。可以补全前导零或者转成时间类型解决:-- 补全到6位再排序 SELECT * FROM 你的表名 ORDER BY LPAD(hhmmss字段名, 6, '0') ASC; -- 转成时间类型排序 SELECT * FROM 你的表名 ORDER BY STR_TO_DATE(hhmmss字段名, '%H%i%s') ASC; - 组合日期+时分秒排序:如果要结合epoch(日期部分)和hhmmss(当日时间)排序,得确保两者都按正确类型处理:
SELECT * FROM 你的表名 ORDER BY CAST(epoch字段名 AS BIGINT) ASC, STR_TO_DATE(hhmmss字段名, '%H%i%s') ASC;
先确认字段类型
先查询字段的实际存储类型,避免类型不匹配导致的排序问题:
DESCRIBE 你的表名;
如果epoch或hhmmss字段是VARCHAR/TEXT类型,必须转换类型后再排序。
内容的提问来源于stack exchange,提问作者Claire
相关产品推荐
相关产品推荐

