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

MySQLで90日前から現在までの期間のレコードを抽出する方法

MySQLで「90日前から現在まで」といった特定の期間に該当するレコードを抽出するには、INTERVAL演算子とBETWEEN句を組み合わせます。本記事では、実際のSQLサンプルを通して手順をわかりやすく解説します。

サンプルテーブルの作成

まず、日付型(DATE)カラムを持つテーブルを作成しましょう。

mysql> create table DemoTable
(
    DueDate date
);
Query OK, 0 rows affected (1.13 sec)

テストデータの挿入

INSERT文を使って、いくつかの日付データを登録します。

mysql> insert into DemoTable values('2019-07-10');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('2019-09-02');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('2019-06-01');
Query OK, 1 row affected (0.25 sec)
mysql> insert into DemoTable values('2019-05-10');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('2019-08-21');
Query OK, 1 row affected (0.14 sec)

登録済みレコードの確認

SELECT文で全レコードを表示し、正しく登録されているか確認しておきましょう。

mysql> select *from DemoTable;

上記のクエリを実行すると、次のような結果が出力されます。

+------------+
| DueDate    |
+------------+
| 2019-07-10 |
| 2019-09-02 |
| 2019-06-01 |
| 2019-05-10 |
| 2019-08-21 |
+------------+
5 rows in set (0.00 sec)

90日前から現在までのレコードを取得するクエリ

ここがポイントです。NOW()関数からINTERVAL 90 DAYを差し引くことで「90日前の日時」を求められます。これをBETWEEN句と組み合わせることで、指定期間内のレコードだけを抽出できます。

mysql> select *from DemoTable
where DueDate between now() - interval 90 day and now();

実行すると、過去90日以内の日付を持つ行のみが返されます。

+------------+
| DueDate    |
+------------+
| 2019-07-10 |
| 2019-08-21 |
+------------+
2 rows in set (0.00 sec)

補足:INTERVAL式のさまざまな使い方

INTERVALは日数以外の単位でも指定可能です。用途に応じて以下のような書き方が便利です。

  • NOW() - INTERVAL 3 MONTH … 3ヶ月前
  • NOW() - INTERVAL 1 YEAR … 1年前
  • NOW() - INTERVAL 24 HOUR … 24時間前
  • CURDATE() - INTERVAL 90 DAY … 時刻を含まない今日の日付から90日前

特にDATE型カラムとの比較では、時刻情報を持たないCURDATE()を使うほうが、意図した結果になりやすいケースがあります。条件の性質に合わせてNOW()CURDATE()を使い分けるとよいでしょう。

  1. MySQLでテーブルのデータを選択して、同じデータベース内の別のテーブルに挿入する方法

    あるテーブルから別のテーブルへデータを挿入するには、INSERT INTOステートメントを使用します。この記事では、SELECT文で取得したデータを、同じデータベース内の別テーブルへ挿入する手順を、実際のSQL文と実行結果とともに解説します。1. 元となるテーブルを作成するまず、データのコピー元となるテーブル「DemoTable1」を作成します。mysql> create table DemoTable1      (      Id int,      FirstName varchar(20),

  2. MySQLテーブルで先頭ゼロ付きの値を選択して挿入する方法

    MySQLで連番に先頭ゼロ(先行ゼロ)を付けた値をテーブルに挿入したい場合は、INSERT INTO SELECT文とLPAD()関数を組み合わせることで実現できます。LPAD()は文字列を指定した長さまで左側を特定の文字で埋める関数で、これを使えば「001」「002」のような形式のIDを簡単に生成できます。テーブルの作成まず、サンプル用のテーブルを作成しましょう。mysql> create table DemoTable1967 ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, UserId varchar(20)