mysql自定义订单截止日期

时间:2012-12-01 00:00:09

标签: mysql sql-order-by

我有一张表,列出了一年中所有十二个月的col月份。我想在当前月份订购此col,然后按时间顺序排序,如果我现在运行查询;

DEC

JAN

FEB

...

SEPT

NOV

月份的格式为MONTHNAME(STR_TO_DATE(U.month,'%m'))

我从我在这里找到的东西改编了这个,但它只会帮助确保当前月份列在最后的任何想法中?

      ORDER BY (CASE 
           WHEN Month = MONTH(NOW())
           THEN 1
           ELSE 0
       END ) ASC, month ASC

2 个答案:

答案 0 :(得分:0)

ORDER BY (CASE 
          WHEN Month = MONTH(NOW())
          THEN 1
          ELSE 0
          END) DESC, month ASC

或:

ORDER BY (CASE 
          WHEN Month = MONTH(NOW())
          THEN 0
          ELSE 1
          END) ASC, month ASC

要么应该这样做。

答案 1 :(得分:0)

如果您想坚持几个月的字符串值,可以稍微修改一下。您可能需要使用完整的月份名称,或者使用所有月份的3个字母缩写(我不太确定您使用的是什么格式,因为您的示例显示了缩写,但您还提到了MONTHNAME()哪些输出整整一个月。这是怎么回事

对于3个字母的月份缩写:

ORDER BY (STR_TO_DATE(CONCAT(`month`, ' 01 2012'), '%b %d %Y')) ASC

完整月份名称:

ORDER BY (STR_TO_DATE(CONCAT(`month`, ' 01 2012'), '%M %d %Y')) ASC

这会将月份值转换为日期(通过添加日期和年份),然后排序。