0

以下のように、同じフィールドに月と年を含む mysql テーブルがあります。

+----------------+
|    duedate     |
+----------------+
|   Sept '12     | 
|   Oct '12      | 
|   Nov '12      | 
|   May'13       | 
|   Mar'13       | 
|   Mar '13      | 
|   Jan '13      | 
|   Feb '13      | 
|   Dec '12      | 
|   Aug '12      | 
|   Apr '13      | 
+----------------+

以下のように、月と年の値をDESC順にソートして、このテーブルを取得したいと思います。

+------------+
|  duedate   |
+------------+
|   May'13   | 
|   Apr '13  | 
|   Mar '13  | 
|   Mar'13   | 
|   Feb '13  | 
|   Jan '13  | 
|   Dec '12  | 
|   Nov '12  |
|   Oct '12  |
|   Sept '12 |
|   Aug '12  | 
+------------+

上記のように並べ替えることは可能ですか..以下のSQLクエリを試しましたが、年の値のDESCのみでデータを並べ替えます.月の並べ替えは機能しません..

"SELECT DISTINCT duedate FROM sample_table ORDER BY substr(duedate, -2) DESC, FIELD(duedate, 'Dec', 'Nov', 'Oct', 'Sep', 'Aug', 'Jul', 'Jun', 'May', 'Apr', 'Mar', 'Feb', 'Jan')"

助けてください..

4

3 に答える 3

1

日付は、やっているように aまたは aDATEではなく、型に保存する必要があります。VARCHARCHAR

その場合、次のように使用するだけで、必要な順序でデータを簡単に取得できますORDER BY

select * from YOURTABLE order by date asc

何らかの理由でこれを変更できない場合は、テーブルに別の列を追加することをお勧めします (read_dateたとえば、と呼ばれます)。次に、次のようなものでテーブルを更新します。

update table YOURTABLE set real_date = date

これにより、列に正しい値が追加され、日付を適切に操作できるようになります。

それでもこれを行いたくない場合は、いつでもデータをキャストして、次のようにSTR_TO_DATE関数を使用して強制的に日付として読み取ることができます。

SELECT * FROM YOURTABLE ORDER BY STR_TO_DATE(date, '%b %y') DESC;

Mysql の日付形式の詳細については、こちらを参照してください。

于 2013-05-08T08:41:48.777 に答える
0

あなたはこのように試すことができます-

SELECT STR_TO_DATE(duedate,'%M \'%Y') as due  FROM demo ORDER BY due DESC

よくわかりませんが、mysqlでstr_to_dateを試してみてください

dem リンクを参照してください: SQLFIDDLE

于 2013-05-08T08:44:28.240 に答える
0

このデータは、データベースではテキストとして認識され、日付順ではなく英数字順にソートされるため、特に簡単にソートすることはできません。

最善の解決策は、月と年のフィールドを追加し、値を整数として保存してから、PHP の date() フォーマットを使用して文字列値を出力することです。その後、整数で正確に並べ替えることができます

または、クエリでキーワードを使用して並べ替えることもできますがFIELD、これは最良の方法ではありません

SELECT * FROM YOURTABLE ORDER BY FIELD(duedate, 'May 13', 'Jun 13', 'Jul 13', ....)
于 2013-05-08T08:44:14.457 に答える