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

MySQLでNOW()から1日前以降のレコードを取得する方法

NOW()から1日前以降のレコードを取得する基本構文

MySQLで「現在時刻(NOW())から1日前」以降のレコードを取得したい場合は、INTERVAL句を組み合わせた以下の構文を使用します。

SELECT * FROM テーブル名 WHERE カラム名 >= NOW() - INTERVAL 1 DAY;

この構文では、指定したdatetime型のカラムの値が、現在時刻から24時間前(1日前)よりも新しいレコードだけが抽出されます。それでは、実際にテーブルを作成して動作を確認してみましょう。

サンプルテーブルの作成

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

mysql> CREATE TABLE GetRecordsFromNow
    -> (
    -> YourDateTime DATETIME
    -> );
Query OK, 0 rows affected (1.76 sec)

テストデータの挿入

次に、現在時刻を基準にしたさまざまな日付データを挿入します。DATE_ADD()関数を使うことで、NOW()を基準に過去や未来の日付を簡単に生成できます。

mysql> INSERT INTO GetRecordsFromNow VALUES(DATE_ADD(NOW(), INTERVAL 3 DAY));
Query OK, 1 row affected (0.28 sec)

mysql> INSERT INTO GetRecordsFromNow VALUES(DATE_ADD(NOW(), INTERVAL -1 DAY));
Query OK, 1 row affected (0.11 sec)

mysql> INSERT INTO GetRecordsFromNow VALUES(DATE_ADD(NOW(), INTERVAL -2 DAY));
Query OK, 1 row affected (0.14 sec)

mysql> INSERT INTO GetRecordsFromNow VALUES(DATE_ADD(NOW(), INTERVAL -3 DAY));
Query OK, 1 row affected (0.09 sec)

mysql> INSERT INTO GetRecordsFromNow VALUES(DATE_ADD(NOW(), INTERVAL -1 DAY));
Query OK, 1 row affected (0.08 sec)

この例では、未来の日付(+3日)、ちょうど1日前(-1日)、2日前(-2日)、3日前(-3日)、そして再び1日前(-1日)の計5件のレコードを挿入しています。

登録済みデータの確認

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

mysql> SELECT * FROM GetRecordsFromNow;

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

+---------------------+
| YourDateTime        |
+---------------------+
| 2018-12-07 22:30:18 |
| 2018-12-03 22:30:31 |
| 2018-12-02 22:30:41 |
| 2018-12-01 22:30:56 |
| 2018-12-03 22:31:04 |
+---------------------+
5 rows in set (0.00 sec)

1日前以降のレコードのみを抽出するクエリ

ここで本題のクエリを実行します。「NOW()から1日前」以降のレコードを取得するには、WHERE句に>= NOW() - INTERVAL 1 DAYという条件を指定します。

mysql> SELECT * FROM GetRecordsFromNow WHERE YourDateTime >= NOW() - INTERVAL 1 DAY;

実行結果:

+---------------------+
| YourDateTime        |
+---------------------+
| 2018-12-07 22:30:18 |
+---------------------+
1 row in set (0.04 sec)

結果の解説

この出力例では、基準時刻が2018年12月4日22時30分頃のため、「1日前=2018年12月3日22:30以降」という条件になります。挿入した5件のうち、条件に該当するのは未来の日付である「2018-12-07 22:30:18」の1件だけでした。-1日のデータは基準時刻よりわずかに古いため、厳密には範囲外となる点に注意してください。

補足:SUBDATE関数を使った別の書き方

同様の結果はSUBDATE()関数でも得られます。

SELECT * FROM GetRecordsFromNow WHERE YourDateTime >= SUBDATE(NOW(), INTERVAL 1 DAY);

また、直近24時間ではなく「今日の0時以降」を取得したい場合は、CURDATE()を利用すると便利です。

SELECT * FROM GetRecordsFromNow WHERE YourDateTime >= CURDATE();

用途に応じてこれらの方法を使い分けることで、柔軟な日付条件でのレコード抽出が可能になります。

  1. MySQLで同じ日付のレコードの値を合計する方法(GROUP BYとDATE関数の使い方)

    はじめに MySQLでは、GROUP BY句とDATE()関数を組み合わせることで、同じ日付(日単位)のレコードに含まれる値を簡単に合計できます。datetime型のカラムには時刻情報も含まれていますが、DATE()関数を使えば日付部分だけを取り出してグループ化できるのがポイントです。 ここでは、実際にサンプルテーブルを作成し、同じ日の値を合計する手順を順番に解説していきます。 1. テーブルを作成する まず、以下のコマンドでテーブルを作成しましょう。今回は購入日時(PurchaseDate)と商品価格(ProductPrice)を持つテーブルを用意しました。 mysql> create

  2. MySQLで月の範囲を指定してレコードを取得する方法

    MySQLでは、YEAR()関数とMONTH()関数、さらにBETWEEN演算子を組み合わせることで、特定の月の範囲に該当するレコードを簡単に抽出できます。ここでは、前年の7月〜12月と当年の1月〜7月というように、年をまたいだ月の範囲でデータを取得する方法を解説します。 サンプルテーブルの作成 まず、テーブルを作成します。 mysql> create table DemoTable1795      (      Name varchar(20),      DueDate date