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

MySQLで現在日から8か月前以降のレコードを取得する方法


現在の日付から8か月前以降のレコードを抽出したい場合は、INTERVAL 8 MONTHを使用します。基本的な構文は以下の通りです。

select *from yourTableName where yourColumnName>= (CURRENT_DATE() - INTERVAL 8 MONTH);

補足: 本記事では、現在の日付が「2019-02-06」であるものとして説明を進めます。

サンプルテーブルの作成

まずは動作確認用のテーブルを作成しましょう。

mysql> create table DemoTable (StudentName varchar(100), AdmissionDate date);
Query OK, 0 rows affected (0.75 sec)

レコードの挿入

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

mysql> insert into DemoTable values('John','2019-01-21');
Query OK, 1 row affected (0.27 sec)
mysql> insert into DemoTable values('Chris','2019-10-04');
Query OK, 1 row affected (0.25 sec)
mysql> insert into DemoTable values('Robert','2018-02-01');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('David','2019-07-07');
Query OK, 1 row affected (0.15 sec)

登録データの確認

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

mysql> select *from DemoTable;

実行すると、以下のような結果が得られます。

+-------------+---------------+
| StudentName | AdmissionDate |
+-------------+---------------+
| John        | 2019-01-21    |
| Chris       | 2019-10-04    |
| Robert      | 2018-02-01    |
| David       | 2019-07-07    |
+-------------+---------------+
4 rows in set (0.00 sec)

8か月前以降のレコードを取得するクエリ

CURRENT_DATE()から「INTERVAL 8 MONTH」を引いた日付と比較することで、直近8か月以内(8か月前以降)に入学した学生のレコードだけを取り出すことができます。

mysql> select *from DemoTable where AdmissionDate >= (CURRENT_DATE() - INTERVAL 8 MONTH);

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

+-------------+---------------+
| StudentName | AdmissionDate |
+-------------+---------------+
| John        | 2019-01-21    |
| Chris       | 2019-10-04    |
| David       | 2019-07-07    |
+-------------+---------------+
3 rows in set (0.00 sec)

結果の解説

基準日は「2019-02-06」なので、「CURRENT_DATE() - INTERVAL 8 MONTH」は「2018-06-06」となります。そのため、AdmissionDateが2018年6月6日以降のJohn・Chris・Davidの3件のみが該当し、それより古いRobertのレコードは除外されます。

なお、期間の指定にはMONTH以外にもDAYやYEARなどさまざまな単位が利用できます。また、「NOW()」を使えば日付に加えて時刻も考慮した比較が可能になるため、用途に応じて使い分けるとよいでしょう。

  1. 【MySQL】STR_TO_DATEを使って異なる形式の日付から特定日以降のレコードを取得する方法

    はじめにデータベースの運用では、日付が「21/11/2019」のような文字列形式(DD/MM/YYYY)で保存されているケースによく出会います。このような場合、UNIX_TIMESTAMP() の代わりに STR_TO_DATE() 関数を使うことで、文字列の日付を正しく変換し、特定の日付以降のレコードを簡単に抽出できます。本記事では、実際のSQL例を使いながら、その手順をわかりやすく解説します。1. サンプルテーブルの作成まず、日付をvarchar型で保持するテーブルを作成します。mysql> create table DemoTable1808 ( Admission

  2. MySQLで複数のレコードをすばやく一括挿入するクエリの書き方

    MySQLで複数のレコードを効率よく挿入したい場合、INSERT文を何度も実行するのではなく、1つのINSERT文で複数行をまとめて指定するのがおすすめです。この方法ならデータベースとの通信回数が減り、処理速度が大幅に向上します。 基本構文 複数のレコードをすばやく挿入するには、単一のINSERT文を使い、以下の構文に従います。 insert into yourTableName values(yourValue1,yourValue2,...N),(yourValue1,yourValue2,...N).....N; ポイントは、各行の値セットをカンマ(,)で区切って並べるだけというシンプル