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

MySQLで時間差を取得するクエリの書き方を解説

MySQLで現在時刻との時間差を取得する方法

MySQLでは、NOW() 関数と INTERVAL を組み合わせることで、「現在時刻から一定時間以内」のレコードを簡単に抽出できます。ここでは、現在時刻から5時間以内に到着したデータを取得するクエリを例に、その手順を解説します。

1. サンプルテーブルの作成

まず、日時を格納するカラムを持つテーブルを作成します。

mysql> create table DemoTable1570
    -> (
    -> ArrivalTime datetime
    -> );
Query OK, 0 rows affected (0.87 sec)

2. テストデータの挿入

INSERT コマンドを使って、複数のレコードを登録します。

mysql> insert into DemoTable1570 values('2019-10-15 5:10:00');
Query OK, 1 row affected (0.25 sec)
mysql> insert into DemoTable1570 values('2019-10-15 23:00:00');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1570 values('2019-10-15 23:10:00');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1570 values('2019-10-15 16:10:00');
Query OK, 1 row affected (0.15 sec)

3. 登録データの確認

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

mysql> select * from DemoTable1570;

実行結果は以下のとおりです。

+---------------------+
| ArrivalTime |
+---------------------+
| 2019-10-15 05:10:00 |
| 2019-10-15 23:00:00 |
| 2019-10-15 23:10:00 |
| 2019-10-15 16:10:00 |
+---------------------+
4 rows in set (0.00 sec)

4. 現在の日時を確認

NOW() 関数で現在の日時を取得できます。

mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2019-10-15 22:26:14 |
+---------------------+
1 row in set (0.00 sec)

5. 時間差を条件にデータを抽出するクエリ

現在時刻から5時間以内のレコードを取得するには、NOW() - INTERVAL 5 HOUR を条件に指定します。

mysql> select * from DemoTable1570
    -> where ArrivalTime > now() - interval 5 hour;

実行結果は以下のとおりです。

+---------------------+
| ArrivalTime |
+---------------------+
| 2019-10-15 23:00:00 |
| 2019-10-15 23:10:00 |
+---------------------+
2 rows in set (0.00 sec)

ポイント解説

now() - interval 5 hour は「現在時刻から5時間前の時刻」を表します。この値より後の ArrivalTime を持つレコードのみが抽出されるため、結果として 22:26:14 以降 の2件(23:00:00 と 23:10:00)が表示されました。

なお、INTERVAL の単位は自由に変更できます。例えば、interval 30 minute(30分前)、interval 1 day(1日前)、interval 7 day(1週間前)など、用途に応じて柔軟に指定可能です。この手法は、直近のアクセスログや最新の注文データなど、「最近のデータだけを取得したい」場面で非常に役立ちます。

  1. 【MySQL】1つのクエリで複数の行を取得する方法(IN演算子の使い方)

    概要MySQLで1つのクエリだけで複数の行を取得したい場合は、IN演算子を使用します。WHERE句の中で IN(値1, 値2, …) のようにカンマ区切りで条件を指定すると、いずれかの値に一致するすべての行をまとめて取得できます。本記事では、サンプルテーブルを作成しながら、具体的な手順をわかりやすく解説します。1. テーブルを作成するまず、動作確認用のテーブルを作成しましょう。mysql> create table DemoTable(    Id int,    Name varchar(100));Que

  2. MySQLのバージョンを確認する方法をわかりやすく解説

    この記事では、現在利用しているMySQLサーバーのバージョンを確認する方法について詳しく解説します。コンソールでクエリを実行する前に、まずクライアントがサーバーに正しく接続されていることを確認しておきましょう。接続が確立されていないと、クエリを実行しても結果を取得できません。MySQLのバージョンを確認する基本クエリ以下のクエリを実行すると、使用中のサーバーのバージョン番号と、実行時点の日付を同時に取得できます。mysql> SELECT VERSION(), CURRENT_DATE;ポイント: 関数「VERSION()」や「CURRENT_DATE」は大文字・小文字を区別しません。つ