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

MySQLでタイムスタンプが現在の時刻と同じ「時」のレコードを抽出する方法

MySQLで、タイムスタンプ型のカラムから「現在の時刻と同じ『時』(hour)に該当するレコード」だけを抽出したい場合があります。そのようなときは、CURTIME() 関数と HOUR() 関数を組み合わせることで簡単に実現できます。

CURTIME() と HOUR() の基本

CURTIME() は現在の時刻を返す関数で、HOUR() は日付・時刻の値から「時」の部分だけを整数として取り出す関数です。この2つを比較条件に使うことで、「今と同じ時間帯のデータ」を絞り込むことができます。

サンプルテーブルの作成

まず、タイムスタンプ型のカラムを持つテーブルを作成します。

mysql> create table DemoTable
-> (
-> ArrivalTime timestamp
-> );
Query OK, 0 rows affected (0.65 sec)

テストデータの挿入

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

mysql> insert into DemoTable values('2019-10-26 17:55:55');
Query OK, 1 row affected (0.46 sec)
mysql> insert into DemoTable values('2019-10-26 18:00:00');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values('2019-10-26 18:55:00');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('2018-10-26 16:00:10');
Query OK, 1 row affected (0.20 sec)

登録データの確認

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

mysql> select *from DemoTable;

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

+---------------------+
| ArrivalTime |
+---------------------+
| 2019-10-26 17:55:55 |
| 2019-10-26 18:00:00 |
| 2019-10-26 18:55:00 |
| 2018-10-26 16:00:10 |
+---------------------+
4 rows in set (0.00 sec)

現在の時刻を確認する

続いて、CURTIME() で現在の時刻を確認します。

mysql> select curtime();
+-----------+
| curtime() |
+-----------+
| 18:43:55 |
+-----------+
1 row in set (0.00 sec)

現在は18時43分なので、抽出対象となるのは「18時台」のレコードということになります。

現在の「時」と一致するレコードを抽出するクエリ

以下が、タイムスタンプが現在の時刻と同じ「時」であるレコードを選択するクエリです。

mysql> select *from DemoTable where hour(ArrivalTime)=hour(curtime());

実行すると、次のような結果が得られます。

+---------------------+
| ArrivalTime |
+---------------------+
| 2019-10-26 18:00:00 |
| 2019-10-26 18:55:00 |
+---------------------+
2 rows in set (0.00 sec)

解説と注意点

このクエリでは hour(ArrivalTime)hour(curtime()) を比較しているため、日付や年は無視され、「時」の部分だけが一致するかどうかで判定されます。上記の例では、現在時刻が18時台のため、18:00:00 と 18:55:00 の2件が抽出されています。

なお、この方法では年をまたぐ古いデータ(例:2018年の16時台)も、もし現在が16時台であれば一致とみなされます。「今日のデータに限定したい」場合は、DATE(ArrivalTime) = CURDATE() のような条件を AND で組み合わせるとよいでしょう。

  1. MySQLのWHERE句で日付の差を計算して行を抽出する方法(TIMESTAMPDIFFの使い方)

    MySQLでは、TIMESTAMPDIFF() 関数を使うことで、日時同士の差分を計算し、その結果に基づいてWHERE句で行を絞り込むことができます。ここでは、指定した日時との差が5分以内のレコードを抽出する例を紹介します。サンプルテーブルの作成まず、datetime型のカラムを持つテーブルを作成しましょう。mysql> create table demo42 -> ( -> start_date datetime -> ); Query OK, 0 rows affected (0.77 sec)テーブルへのデータ挿入次に、INSERT文を使っていくつかの日時データを

  2. MySQLでWHERE IN句とNULLを組み合わせてレコードを取得する方法

    MySQLでは、WHERE IN句を使った検索時にNULL値を含む行も取得したいケースがあります。しかし、NULLは通常の比較演算子では正しく評価されないため、IS NULLを組み合わせる必要があります。本記事では、その具体的な方法をサンプルコードとともに解説します。基本の構文NULLを含めて検索する場合の基本的な構文は以下のとおりです。ポイントは、IN句の条件に加えて OR カラム名 IS NULL を追加することです。SELECT yourColumnName1, yourColumnName2, yourColumnName3, ... N FROM yourTabl