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

MySQLで今後12時間以内に期限が近づくレコードを抽出するクエリの書き方

日時データの中から「現在時刻から今後12時間以内」に期限が到来するレコードだけを抽出したいケースは、タスク管理やリマインダー機能などでよくあります。このような条件検索には、DATE_ADD() 関数と INTERVAL 12 HOUR を組み合わせると簡単に実現できます。

本記事では、実際にテーブルを作成し、サンプルデータを挿入しながら、具体的なクエリの書き方を順番に解説していきます。

1. テーブルを作成する

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

mysql> create table DemoTable (DueDateTime datetime);
Query OK, 0 rows affected (0.60 sec)

2. サンプルデータを挿入する

次に、INSERT文を使って複数のレコードを登録します。

mysql> insert into DemoTable values('2019-07-12 10:50:30');
Query OK, 1 row affected (0.29 sec)

mysql> insert into DemoTable values('2019-07-12 22:02:00');
Query OK, 1 row affected (0.23 sec)

mysql> insert into DemoTable values('2019-07-12 11:12:10');
Query OK, 1 row affected (0.19 sec)

mysql> insert into DemoTable values('2019-07-12 09:02:00');
Query OK, 1 row affected (0.10 sec)

3. 登録されたデータを確認する

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

mysql> select * from DemoTable;

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

+---------------------+
| DueDateTime         |
+---------------------+
| 2019-07-12 10:50:30 |
| 2019-07-12 22:02:00 |
| 2019-07-12 11:12:10 |
| 2019-07-12 09:02:00 |
+---------------------+
4 rows in set (0.00 sec)

4. 今後12時間以内のレコードを抽出するクエリ

ここからが本題です。現在時刻から12時間以内に期限が近づくレコードを選択するには、以下のようなクエリを使用します。

mysql> select * from DemoTable
    -> where date_add(DueDateTime, interval 12 hour)
    -> BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 12 HOUR);

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

+---------------------+
| DueDateTime         |
+---------------------+
| 2019-07-12 10:50:30 |
| 2019-07-12 22:02:00 |
| 2019-07-12 11:12:10 |
+---------------------+
3 rows in set (0.00 sec)

クエリの仕組みを解説

上記のクエリでは、date_add(DueDateTime, interval 12 hour) によって各レコードの期限日時に12時間を加算した値を計算しています。その結果が NOW()(現在時刻)から DATE_ADD(NOW(), INTERVAL 12 HOUR)(現在時刻の12時間後)の範囲内にあるかどうかを BETWEEN 演算子で判定しています。

つまり「期限日時の12時間前の時点が、現在〜未来12時間の間に入るレコード」という条件になり、結果として「現在時刻から数えて24時間以内に期限を迎えるレコード」が抽出されることになります。

なお、出力例は2019年7月12日の午前中(約11時頃)に実行した場合の結果です。現在時刻によって抽出されるレコードは変わりますので、実際に試す際はご自身の環境のシステム時刻に合わせて確認してください。

  1. MySQLでSELECTクエリを使用してデータを挿入(INSERT)する方法

    MySQLでは、INSERT文とSELECTクエリを組み合わせることで、テーブルにデータを挿入することができます。通常、SELECTは既存のテーブルからデータを取得するために使われますが、値を直接指定してINSERTを実行する際にも活用できる便利な手法です。基本構文SELECTクエリを使用してINSERTを実行する場合の構文は以下の通りです。insert into yourTableName(yourColumnName1,yourColumnName2,yourColumnName3,...N) select yourValue1,yourValue2,yourValue3,......N;

  2. MySQLで通貨形式を表示する方法:FORMAT()関数の使い方を解説

    MySQLで通貨形式を設定する方法MySQLでは、FORMAT()関数を使うことで、数値データを通貨として見やすい形式に整形して表示できます。この記事では、実際にテーブルを作成し、金額データを「USD 90,948,484.00」のような通貨表記へ変換する手順を、サンプルコード付きでわかりやすく解説します。1. サンプルテーブルを作成するまず、金額を格納するためのテーブルを作成します。ここでは、小数点以下4桁まで保持できるDECIMAL型を使用します。mysql> create table DemoTable    -> ( &nb