0

私のような他の質問を見ましたが、私のものとまったく同じではありません。テーブルの 1 つに という列がありますtimeが、新年以降、 でtime注文すると、年が順序付けに考慮されていないため、正しい年代順に引き込まれません。基本的に月日順です。

したがって、現在でtimeある列を に変換する実行可能なコマンドがあると想定しています。 M/D/Y, hour:minutes:secondsY/M/D, hour:minutes:seconds

私はそれが何であるか分かりません。

4

3 に答える 3

3

一時的なデータを格納するには、MySQL の一時的な型を使用する必要があります。

ALTER TABLE my_table
  ADD COLUMN new_time DATETIME AFTER time;

UPDATE my_table SET new_time = STR_TO_DATE(time, '%m/%d/%y %H:%i:%s');

ALTER TABLE my_table
  DROP time,
  CHANGE new_time time DATETIME;

新しいデータ形式も使用するには、アプリケーション コードを変更する必要があることに注意してください。

列のデータ型を変更できない場合はORDER BY STR_TO_DATE()、暫定的に変更できます (ただし、パフォーマンスはあまり向上しません)。

于 2013-01-11T21:59:40.550 に答える
0

まず、このような問題が発生しないように、この列を日時列にする必要がありますが、データをサニタイズするまでそれを行うことはできません。ここで変換を行います。最初に新しい日時フィールドを追加します

最初に m/d/Y レコードから日付を入力します。

UPDATE table SET new_datetime= STR_TO_DATE(old_datetime, '%m/%d/%y,%H:%i:%s') WHERE autoincrement <= [Last autoincrement value for m/d/y format];

次に、Y/m/d レコードから入力します。

UPDATE table SET new_datetime= STR_TO_DATE(old_datetime, '%y/%m/%d,%H:%i:%s') WHERE autoincrement > [Last autoincrement value for m/d/y format];

その後、古いフィールドを削除できます。

関数で使用されている形式が現在のものと一致していることを確認する必要があることに注意してくださいSTR_TO_DATE()(たとえば,、文字列にリテラルが含まれているのか、2 桁の月/日がすべて含まれているのかわかりませんでした。フォーマット パターンに応じてフォーマットを指定する方法については、このリンクを参照してくださいhttp://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-format

于 2013-01-11T22:08:38.300 に答える
0

選択では、次を使用できます。

 SELECT DATE_FORMAT('2012-10-10', '%y/%c/%d');

必要な形式に変更します。詳細については、 http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-formatを確認してください。

于 2013-01-11T22:01:57.040 に答える