MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLでタイムスタンプ順にデータを並べ替える方法を解説

MySQLで文字列として保存されたタイムスタンプ(日時)をもとにレコードを並べ替えたい場合、ORDER BY句とSTR_TO_DATE()関数を組み合わせることで実現できます。

以下が基本の構文です。

select *from yourTableName ORDER BY STR_TO_DATE(`yourColumnName`, '%m/%d/%Y%h:%i:%s %p');

STR_TO_DATE()関数は、指定したフォーマットに従って文字列を日時型に変換するため、正しい時系列順でのソートが可能になります。

サンプルテーブルの作成

まず、動作確認用のテーブルを作成しましょう。ここではタイムスタンプをvarchar型のカラムに保存しています。

mysql> create table DemoTable
    -> (
    -> `timestamp` varchar(100)
    -> );
Query OK, 0 rows affected (0.56 sec)

テストデータの挿入

次に、insertコマンドを使っていくつかのレコードを挿入します。

mysql> insert into DemoTable values('06/22/2019 01:10:20 PM');
Query OK, 1 row affected (0.13 sec)

mysql> insert into DemoTable values('06/22/2019 12:00:27 PM');
Query OK, 1 row affected (0.26 sec)

mysql> insert into DemoTable values('06/22/2019 06:56:20 AM');
Query OK, 1 row affected (0.23 sec)

mysql> insert into DemoTable values('06/22/2019 07:10:11 AM');
Query OK, 1 row affected (0.15 sec)

登録データの確認

select文ですべてのレコードを表示してみます。

mysql> select *from DemoTable;

出力結果

+------------------------+
| timestamp              |
+------------------------+
| 06/22/2019 01:10:20 PM |
| 06/22/2019 12:00:27 PM |
| 06/22/2019 06:56:20 AM |
| 06/22/2019 07:10:11 AM |
+------------------------+
4 rows in set (0.00 sec)

このように、データは挿入された順番に表示されています。文字列のままでは時刻の前後関係が考慮されないため、この状態で単純にORDER BYを使っても正しくソートできません。

タイムスタンプで並べ替えるクエリ

そこで、STR_TO_DATE()関数を使って文字列を日時に変換してから並べ替えます。

mysql> select *from DemoTable ORDER BY STR_TO_DATE(`timestamp`,'%m/%d/%Y%h:%i:%s %p');

出力結果

+------------------------+
| timestamp              |
+------------------------+
| 06/22/2019 06:56:20 AM |
| 06/22/2019 07:10:11 AM |
| 06/22/2019 12:00:27 PM |
| 06/22/2019 01:10:20 PM |
+------------------------+
4 rows in set (0.00 sec)

実行結果を見ると、午前6時56分から始まり、時系列どおりに昇順で並べ替えられていることがわかります。

ポイントまとめ

  • フォーマット指定子「%m/%d/%Y」は月/日/年、「%h:%i:%s」は時:分:秒、「%p」はAM/PMを表します。
  • 降順で並べ替えたい場合は、末尾にDESCを追加してください。
  • 頻繁にソートを行う場合は、カラムの型をDATETIMEやTIMESTAMPに変更しておくと、インデックスを活用できパフォーマンス面で有利です。
  1. MySQLでタイムスタンプ(TIMESTAMP)が設定されているかどうかを確認する方法

    はじめにMySQLでは、TIMESTAMP型のカラムに有効な日時が設定されているかどうかを確認したいケースがあります。例えば、初期値として「0000-00-00」が格納されているレコードと、実際に日付が設定されているレコードを区別したい場合などです。本記事では、サンプルテーブルを作成し、TIMESTAMPカラムに値が設定されているかどうかを判定するクエリの書き方を、具体的な手順とともに解説します。1. サンプルテーブルの作成まず、TIMESTAMP型のカラムを持つテーブルを作成します。mysql> create table DemoTable855(DueDate timestamp);

  2. MySQLのORDER BY CASEとIN()を使ってグループ化したフィールドを並べ替える方法

    MySQLでグループ化したフィールドを並べ替えるには?グループ化されたフィールドに対して並べ替えを行いたい場合は、ORDER BY CASEとIN()を組み合わせて使用します。CASE式は複数の条件を評価して優先順位を決め、ORDER BYはその結果をもとに値を昇順または降順にソートします。また、MySQLのIN()は指定した複数の値の中から一致するものを検索するために使われます。この仕組みにより、「特定の値をまとめて先頭に表示したい」「カスタム順序でソートしたい」といった柔軟な並べ替えが可能になります。1. テーブルを作成するまず、サンプル用のテーブルを作成しましょう。mysql> c