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()を組み合わせれば、ログの絞り込みや有効期限のチェックなど、時間軸に基づいたデータ抽出を柔軟に実現できます。
-
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タイムスタンプに変換
-
MySQLのSELECT文にワイルドカードを追加する方法(CONCAT関数の活用)
MySQLでSELECT文にワイルドカードを追加するには?MySQLで部分一致検索を行いたい場合、CONCAT()関数を使ってLIKE句にワイルドカード(%)を動的に追加する方法が便利です。値の前後に「%」を連結することで、文字列の一部分だけでも検索できるようになります。基本構文ワイルドカードを追加して検索する場合、基本的な構文は以下の通りです。SELECT * FROM テーブル名 WHERE カラム名 LIKE CONCAT(%, 検索値, %);この書き方により、指定した値がカラム内のどこに含まれていても(前方・中間・後方)ヒットするようになります。サンプルテーブルの作成まず、動作を確認