0

私は既存のウェブサイトの更新に取り組んできました。その中で、テーブルに保存する入力フォームがありました...テーブル構造とサンプルデータは次のとおりです

id  |  name       | type    |  in_date     |  year   
-----------------------------------------------------
1   |  name1      | 1       |  2-July      |  2011
2   |  name2      | 2       |  2-June      |  2011
3   |  name44     | 2       |  8-Sep       |  2011

今、私はこのテーブルを日付全体で、つまり(2011年6月2日として)単純なクエリとして注文する必要があります

SELECT * FROM order_list order by date DESC

このアクションを実行する方法はありますか?私はたくさんのクエリを試しました....これらの2つの行を組み合わせる方法は..

DBには既存のレコードが多く含まれているため、DBを変更することはできません。

4

3 に答える 3

5

DATE日付は文字列ではなくMySQLタイプとして保存する必要があります。

ALTER TABLE order_list ADD COLUMN new_date DATE;

UPDATE order_list
SET new_date = STR_TO_DATE(CONCAT(in_date, '-', year), '%e-%b-%Y');

ALTER TABLE order_list DROP COLUMN in_date, DROP COLUMN year;

その後、注文は簡単になります(つまり、試みたとおりに機能します)。

SELECT * FROM order_list ORDER BY date DESC;

STR_TO_DATEデータベーススキーマを変更できない場合は、句で操作を実行できますORDER BY(ただし、これはあまり効率的ではありません)。

SELECT   *
FROM     order_list
ORDER BY STR_TO_DATE(CONCAT(in_date, '-', year), '%e-%b-%Y') DESC
于 2012-07-22T12:13:37.923 に答える
1

そうしないでください。日付全体を1つの列に入れてから、本当に必要な場合は、年または日/月を保持する計算列を作成します。

これらの2つの既存の列を既存のデータベースの1つの統一された日付の列に統合する簡単なスクリプトを作成できます。

于 2012-07-22T12:08:45.870 に答える
1

+(SQL SERVER)またはCONCAT(MySQL)で試すことができます

SELECT * FROM order_list order by in_date + year DESC
于 2012-07-22T12:14:40.680 に答える