MySQLで現在の日付から3週間前以降のレコードを取得するクエリ(DATE_SUBの使い方)
DATE_SUB()関数とは
MySQLで「現在の日付から3週間前以降」のデータを取得したい場合には、DATE_SUB()関数を利用するのが便利です。この関数は、指定した日付から任意の期間(INTERVAL)を減算した値を返します。
サンプルテーブルの作成
まずはテーブルを作成しましょう。
mysql> create table DemoTable ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, ArrivalDate datetime ); Query OK, 0 rows affected (1.02 sec)
注:ここでは、現在の日付が「2019-06-08」であるものとして説明します。
レコードの挿入
次に、insertコマンドを使ってテーブルにいくつかのレコードを追加します。
mysql> insert into DemoTable(ArrivalDate) values('2019-05-15');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(ArrivalDate) values('2019-06-08');
Query OK, 1 row affected (0.24 sec)
mysql> insert into DemoTable(ArrivalDate) values('2019-05-20');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable(ArrivalDate) values('2019-05-12');
Query OK, 1 row affected (0.12 sec)
登録済みレコードの確認
select文を使って、テーブル内のすべてのレコードを表示してみましょう。
mysql> select * from DemoTable;
出力結果
+----+---------------------+ | Id | ArrivalDate | +----+---------------------+ | 1 | 2019-05-15 00:00:00 | | 2 | 2019-06-08 00:00:00 | | 3 | 2019-05-20 00:00:00 | | 4 | 2019-05-12 00:00:00 | +----+---------------------+ 4 rows in set (0.00 sec)
現在の日付−3週間以降のレコードを取得するクエリ
以下が、目的の日付データを抽出するためのクエリです。WHERE句でDATE_SUB(curdate(), INTERVAL 3 WEEK)を使用し、「今日の日付から3週間前」よりも後の日付を持つレコードだけを取り出しています。
mysql> select ArrivalDate from DemoTable where ArrivalDate> DATE_SUB(curdate(),INTERVAL 3 WEEK);
出力結果
+---------------------+ | ArrivalDate | +---------------------+ | 2019-06-08 00:00:00 | | 2019-05-20 00:00:00 | +---------------------+ 2 rows in set (0.00 sec)
実行結果のポイント
現在の日付が2019-06-08の場合、3週間前にあたるのは2019-05-18です。そのため、それ以前の「2019-05-15」と「2019-05-12」のレコードは除外され、条件を満たす2件のみが出力されました。
なお、INTERVALの部分を「3 MONTH」や「7 DAY」などに変更すれば、月単位・日単位での絞り込みにも簡単に応用できます。また、時刻まで含めて比較したい場合は、curdate()の代わりにnow()を使用するとよいでしょう。
-
MySQLで指定した日付(2010-11-04)から現在の日付までのレコードを抽出する方法
MySQLでは、比較演算子 >= を使うことで、特定の日付から現在までの範囲にあるレコードを簡単に抽出できます。この記事では、サンプルテーブルの作成からデータの挿入、そして指定日(2010-11-04)以降のデータを取得するクエリまで、実際の実行例とともに順を追って解説します。1. テーブルの作成まず、日付型(DATE)カラムを持つテーブルを作成しましょう。mysql> create table DemoTable ( Joiningdate date ); Query OK, 0 rows affected (0.56 sec)2. レコードの挿入INSERTコマンドを使
-
MySQLでSELECT *を使って現在の日付のレコードを検索する方法
現在の日付を取得するには CURDATE() 関数を使用します。さらに、STR_TO_DATE() 関数で文字列を日付型に変換し、現在の日付と比較することで、該当するレコードを抽出できます。以下に基本的な構文を示します。基本構文select *from テーブル名 where str_to_date(カラム名,書式指定子)=curdate();それでは、現在の日付が「27/10/2019」である場合を例に、具体的な手順を見ていきましょう。1. テーブルの作成まず、サンプル用のテーブルを作成します。mysql> create table DemoTable -> (