0

1 年の 12 か月すべてを一覧表示する col month のテーブルがあります。この列を現在の月を一番下にして、時系列順に並べたいので、今クエリを実行した場合;

12月

1月

2月

...

9月

11月

月の形式は 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 に答える