0

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

十二月

一月

二月

...

九月

十一月

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

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

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

2 回答 2

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

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

于 2012-12-01T01:19:06.600 回答
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

要么应该做的伎俩。

于 2012-12-01T00:25:48.230 回答