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

MySQLで現在の日付から1日以上の行を抽出する方法(INTERVALの使い方)

現在の日時を基準に「1日前以降」のデータを取得したい場合は、MySQLのINTERVALを使うと簡単に実現できます。この記事では、サンプルテーブルを作成し、実際に条件に合う行を抽出するまでの手順を順番に解説します。

1. 現在の日付を確認する

まず、CURDATE()関数で現在の日付を確認しておきましょう。

mysql> select curdate();
+------------+
| curdate()  |
+------------+
| 2019-11-29 |
+------------+
1 row in set (0.00 sec)

現在の日付は「2019-11-29」であることがわかりました。

2. サンプルテーブルを作成する

次に、期限日(DueDate)を格納するテーブルを作成します。

mysql> create table DemoTable1806
    (
    DueDate datetime
    );
Query OK, 0 rows affected (0.00 sec)

3. レコードを挿入する

INSERTコマンドを使って、複数のレコードを登録します。

mysql> insert into DemoTable1806 values('2019-11-28');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1806 values('2019-11-29');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1806 values('2019-11-30');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1806 values('2019-11-25');
Query OK, 1 row affected (0.00 sec)

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

SELECT文ですべてのレコードを表示して、データが正しく登録されているか確認しましょう。

mysql> select * from DemoTable1806;

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

+---------------------+
| DueDate             |
+---------------------+
| 2019-11-28 00:00:00 |
| 2019-11-29 00:00:00 |
| 2019-11-30 00:00:00 |
| 2019-11-25 00:00:00 |
+---------------------+
4 rows in set (0.00 sec)

5. 現在の日時から1日前以降の行を抽出する

ここが本題です。now() - INTERVAL 1 DAYで「現在日時の1日前」を算出し、比較演算子>=と組み合わせることで、その日時以降のレコードだけを取り出せます。

mysql> select * from DemoTable1806 where DueDate >= now() - INTERVAL 1 DAY;

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

+---------------------+
| DueDate             |
+---------------------+
| 2019-11-29 00:00:00 |
| 2019-11-30 00:00:00 |
+---------------------+
2 rows in set (0.00 sec)

現在日付(2019-11-29)以前の古いレコード(2019-11-25、2019-11-28)が除外され、該当する2件だけが取得できました。

補足:NOW()とCURDATE()の違い

NOW()は時刻を含む日時を返すのに対し、CURDATE()は日付のみを返します。時刻を無視して日単位で比較したい場合は、DueDate >= CURDATE() - INTERVAL 1 DAYのように書き換えると、意図した結果が得やすくなります。

このようにINTERVALを活用すれば、現在日時を基準とした柔軟な日付条件を簡単に指定できます。期限切れデータの抽出や、直近1日分のログ取得など、日常的な開発現場で幅広く役立つテクニックなので、ぜひ覚えておきましょう。

  1. MySQLのSELECTクエリで別テーブルに存在しない行を抽出する方法(NATURAL LEFT JOIN活用)

    MySQLのSELECTクエリで別テーブルに存在しない行を抽出する方法データベースの運用では、「片方のテーブルには存在するが、もう片方のテーブルには存在しないレコード」を抽出したい場面がよくあります。この記事では、2つのテーブルを作成し、NATURAL LEFT JOINを活用して差分の行を取得する方法を、実際のサンプルコードとともにわかりやすく解説します。1. 最初のテーブルを作成するまずは比較元となる最初のテーブルを作成します。 mysql> create table FirstTableDemo -> ( -> id int, -> name v

  2. MySQLでテーブルの最後の10件のレコードを取得する方法

    MySQLでテーブルの末尾にある10行(最新の10件)を取得したい場合は、SELECT文とLIMIT句を組み合わせたサブクエリを利用します。この記事では、実際にテーブルを作成し、データを挿入しながら、最後の10件を取得するクエリの手順を具体的に解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected