-1

実際、日付が次のような形式で保存されている日付フィールドで行を並べ替えようとしています

DateC
===========
April, 2012
May, 2012
January, 2013

Date
===========
2013-01-03 10:51:23
2013-02-19 10:51:23
2013-03-26 10:51:23

しかし、単に使用するだけではソートできませんORDER BY datec DESC

ORDER BY FIELD (datec, 'December 2012', November 2012'...)データベースに 2 つの日付が保存されているため、使用できません。1 つはタイムスタンプ ieで、もう 1 つはユーザーが自分で入力するdateカスタム日付 ieです。フィールドが空datecの場合、フィールドを出力します。datecdate

だから、私が欲しいのは、両方の日付列で行を並べ替える必要があるということです...

助けてください。ご不明な点がございましたら、お気軽にお問い合わせください。

前もって感謝します...

4

3 に答える 3

1

これがあなたが探しているもので、 and を使用していると思いSTR_TO_DATEますCOALESCE:

select *
from yourtable
order by 
  COALESCE(STR_TO_DATE(datec, '%M %Y'),date)

SQL フィドルのデモ

于 2013-03-31T04:45:27.420 に答える
1

これは、日付をデータベースに文字列として格納する利点の 1 つです。STR_TO_DATE()関数を使用して文字列を有効な日付に変換する必要がある場合は、順序付けを適用できます。

SELECT *
FROM   tableName
ORDER  BY STR_TO_DATE(datec, '%M, %Y') DESC

リンク


スキーマを変更する時間がある場合、最善の方法は、それらの日付をデータベースとして、DATEまたはDATETIMEデータベースに保存することです。SELECTステートメント中に値のフォーマットが心配な場合でも、DATE_FORMAT()希望のフォーマットで日付を文字列に変換する関数が呼び出されます。

例、

SELECT DATE_FORMAT(CURDATE(), '%M, %Y') DateC

譲ります

March, 2013

更新 1

SELECT *
FROM   tableName
ORDER  BY STR_TO_DATE(datec, '%M, %Y') DESC,
          date DESC
于 2013-03-31T04:43:12.330 に答える