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()」を使えば日付に加えて時刻も考慮した比較が可能になるため、用途に応じて使い分けるとよいでしょう。
-
【MySQL】STR_TO_DATEを使って異なる形式の日付から特定日以降のレコードを取得する方法
はじめにデータベースの運用では、日付が「21/11/2019」のような文字列形式(DD/MM/YYYY)で保存されているケースによく出会います。このような場合、UNIX_TIMESTAMP() の代わりに STR_TO_DATE() 関数を使うことで、文字列の日付を正しく変換し、特定の日付以降のレコードを簡単に抽出できます。本記事では、実際のSQL例を使いながら、その手順をわかりやすく解説します。1. サンプルテーブルの作成まず、日付をvarchar型で保持するテーブルを作成します。mysql> create table DemoTable1808 ( Admission
-
MySQLで複数のレコードをすばやく一括挿入するクエリの書き方
MySQLで複数のレコードを効率よく挿入したい場合、INSERT文を何度も実行するのではなく、1つのINSERT文で複数行をまとめて指定するのがおすすめです。この方法ならデータベースとの通信回数が減り、処理速度が大幅に向上します。 基本構文 複数のレコードをすばやく挿入するには、単一のINSERT文を使い、以下の構文に従います。 insert into yourTableName values(yourValue1,yourValue2,...N),(yourValue1,yourValue2,...N).....N; ポイントは、各行の値セットをカンマ(,)で区切って並べるだけというシンプル