AM / PM による並べ替えの問題に直面しています。
ここに私のテーブルデータがあります
login_time
1:30 PM
2:00 AM
8:00 AM
9:30 PM
10:00 PM
11:10 AM
私は結果が欲しい:
login_time
2:00 AM
8:00 AM
11:10 AM
1:30 PM
9:30 PM
10:00 PM
これどうやってするの?
すでに日付を として持っている場合はVARCHAR
、それを列にリファクタリングすることをお勧めしTIME
ます。これはオンラインで簡単に実行できます。
UPDATE tablename SET login_time = STR_TO_DATE(login_time, '%l:%i %p');
ALTER TABLE tablename CHANGE login_time login_time TIME;
データには明らかにtimeのみが含まれTIME
ているため、ここではタイプを使用します。たぶん、タイプが最も適切でしょう。さまざまなオプションについては、http://dev.mysql.com/doc/refman/5.5/en/date-and-time-types.htmlを参照してください。DATETIME
とにかく、列が適切な型にリファクタリングされたら、次のように記述できます。
SELECT
login_time
FROM
tablename
ORDER BY
login_time
検索/並べ替えを高速化するためにインデックスを構築できるという追加の利点があります。login_time
ALTER TABLE tablename ADD INDEX ( login_time );
http://sqlfiddle.com/#!2/03991/1を参照してください([実行計画の表示] をクリックして、実際のインデックスが使用されていることを確認してください)。
言及されたコメントのように、可能であれば、列のデータ型を変更してください。これが変換された値による制御順序から外れている場合:
select login_time from table order by CAST(login_time as datetime)