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