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

MySQLで指定時間以降のタイムスタンプを持つレコードを選択する方法

MySQLで指定時間以降のタイムスタンプを持つレコードを選択する方法

MySQLでは、DATE_SUB()関数とNOW()関数を組み合わせることで、「現在時刻から○分前以降」といった条件でレコードを簡単に抽出できます。この記事では、サンプルテーブルの作成から、直近2分以内のタイムスタンプを持つレコードを取得するクエリの実行まで、手順を追って解説します。

1. テーブルを作成する

まず、DATETIME型のカラムを持つテーブルを作成します。

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

2. レコードを挿入する

INSERT文を使って、日時データをいくつか登録します。

mysql> insert into DemoTable1335 values('2019-09-19 22:54:00');
Query OK, 1 row affected (0.46 sec)
mysql> insert into DemoTable1335 values('2019-09-19 22:59:00');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1335 values('2019-09-19 22:56:00');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable1335 values('2019-09-19 22:52:00');
Query OK, 1 row affected (0.11 sec)

3. 登録したレコードを確認する

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

mysql> select * from DemoTable1335;

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

+---------------------+
| ArrivalTime         |
+---------------------+
| 2019-09-19 22:54:00 |
| 2019-09-19 22:59:00 |
| 2019-09-19 22:56:00 |
| 2019-09-19 22:52:00 |
+---------------------+
4 rows in set (0.00 sec)

4. 現在の日時を確認する

NOW()関数で現在の日時を取得できます。この時点での現在時刻は「22:55:53」です。

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2019-09-19 22:55:53 |
+---------------------+
1 row in set (0.00 sec)

5. 指定時間以降のレコードを抽出する

ここが本題です。DATE_SUB(now(), interval 2 minute)によって「現在時刻から2分前」の時刻を求め、その時刻より後のArrivalTimeを持つレコードのみを抽出します。

mysql> select *from DemoTable1335 where ArrivalTime > date_sub(now(),interval 2 minute);

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

+---------------------+
| ArrivalTime         |
+---------------------+
| 2019-09-19 22:59:00 |
| 2019-09-19 22:56:00 |
+---------------------+
2 rows in set (0.00 sec)

現在時刻が「22:55:53」なので、基準となる時刻は「22:53:53」です。したがって、それ以降のタイムスタンプを持つ「22:59:00」と「22:56:00」の2件が返されました。「22:54:00」と「22:52:00」は条件を満たさないため除外されています。

補足:INTERVALで指定できる単位

INTERVALの単位はMINUTE以外にも、SECOND(秒)、HOUR(時)、DAY(日)、MONTH(月)などさまざまな値を使用できます。例えば、直近2時間以内のレコードを取得したい場合は、以下のように記述します。

mysql> select * from DemoTable1335 where ArrivalTime > date_sub(now(), interval 2 hour);

このように、DATE_SUB()NOW()を組み合わせれば、ログの絞り込みや有効期限のチェックなど、時間軸に基づいたデータ抽出を柔軟に実現できます。

  1. PHPとMySQLで時刻を扱う方法|strtotime()とDATE_FORMAT()による形式変換

    PHPで時刻形式を変換する方法 PHPで時刻データを扱う際、strtotime()関数を使えば、「8:55 PM」のような人間が読みやすい12時間制の表記を、データベースで扱いやすい24時間制(HH:MM:SS)へ簡単に変換できます。 PHPコード例 $timeValue = 8:55 PM; $changeTimeFormat = date(H:i:s, strtotime($timeValue)); echo(24時間制への変換結果=); echo($changeTimeFormat); このコードでは、まずstrtotime()が文字列「8:55 PM」をUNIXタイムスタンプに変換

  2. MySQLのSELECT文にワイルドカードを追加する方法(CONCAT関数の活用)

    MySQLでSELECT文にワイルドカードを追加するには?MySQLで部分一致検索を行いたい場合、CONCAT()関数を使ってLIKE句にワイルドカード(%)を動的に追加する方法が便利です。値の前後に「%」を連結することで、文字列の一部分だけでも検索できるようになります。基本構文ワイルドカードを追加して検索する場合、基本的な構文は以下の通りです。SELECT * FROM テーブル名 WHERE カラム名 LIKE CONCAT(%, 検索値, %);この書き方により、指定した値がカラム内のどこに含まれていても(前方・中間・後方)ヒットするようになります。サンプルテーブルの作成まず、動作を確認