首页 > 解决方案 > SQL 从时间戳按年月排序

问题描述

我有一个带有两个时间戳的表(created_at,confirmed_at)

我想按 created_at 的年份和月份对结果进行排序,并在月份内通过以下方式对结果进行排序:

数据:

created_at, confirmed_at
2018-12-23, 2018-12-06
2018-12-15, 2019-01-20
2019-01-08, 2019-01-11
2019-01-12, 2019-01-13

结果:

created_at, confirmed_at
2019-01, 2019-01-13
2019-01, 2019-01-11
2018-12, 2019-01-20
2018-12, 2018-12-06

如何使用时间戳按 YYYY-mm 排序(以及如何使其快速 -> 如何为该查询编制索引?)

标签: mysqlsqlsortingtimestamp

解决方案


使用 year() 和 month() 函数:

select 
  year(created_at) created_year, 
  month(created_at) created_month, 
  confirmed_at 
from t
order by created_year, created_month, confirmed_at

或者如果你只想要 YYYY-MM 部分:

select DATE_FORMAT(created_at, "%Y-%m"), confirmed_at from t
order by year(created_at), month(created_at), confirmed_at

或者:

select DATE_FORMAT(created_at, "%Y-%m") created, confirmed_at from t
order by created, confirmed_at

或者:

select DATE_FORMAT(created_at, "%Y-%m") created, confirmed_at from t
order by EXTRACT(YEAR_MONTH FROM created_at), confirmed_at

推荐阅读