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

MySQLで今日から15日前以前のレコードを取得する方法|DATE_SUB()とINTERVALの使い方

MySQLで「今日から15日前」より前の日付を持つレコードを抽出したい場合には、DATE_SUB()関数とINTERVALの概念を利用します。ここでは、まずサンプル用のテーブルを作成しましょう。

mysql> create table DemoTable1845
     (
     ArrivalDate date
     );
Query OK, 0 rows affected (0.00 sec)

次に、insertコマンドを使ってテーブルにいくつかのレコードを挿入します。

mysql> insert into DemoTable1845 values('2019-12-02');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1845 values('2019-11-18');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1845 values('2019-12-18');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1845 values('2019-12-25');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1845 values('2019-11-15');
Query OK, 1 row affected (0.00 sec)

select文でテーブル内のすべてのレコードを表示してみましょう。

mysql> select * from DemoTable1845;

これにより、以下の出力が得られます。

+-------------+
| ArrivalDate |
+-------------+
| 2019-12-02  |
| 2019-11-18  |
| 2019-12-18  |
| 2019-12-25  |
| 2019-11-15  |
+-------------+
5 rows in set (0.00 sec)

現在の日付は次の通りです。

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2019-12-02 20:47:05 |
+---------------------+
1 row in set (0.00 sec)

それでは、今日から15日前より前のレコードを取得するためのクエリを見ていきましょう。

mysql> select * from DemoTable1845
     where ArrivalDate < DATE_SUB(NOW(), INTERVAL 15 DAY);

実行すると、以下の出力が得られます。

+-------------+
| ArrivalDate |
+-------------+
| 2019-11-15  |
+-------------+
1 row in set (0.00 sec)

クエリのポイント解説

上記のクエリでは、NOW()で現在の日時を取得し、DATE_SUB(NOW(), INTERVAL 15 DAY)によってその日時から15日分を差し引いています。さらにWHERE句でArrivalDateがその計算結果より小さい(=15日以上前の)レコードだけを絞り込んでいます。

今回の例では基準日が2019-12-02のため、15日前は2019-11-17となり、条件に該当するのは2019-11-15のレコードのみです。なお、INTERVALの単位にはDAY以外にもMONTHやYEARなどを指定できるため、「1か月前」「1年前」といった期間指定によるデータ抽出にも幅広く応用できます。

  1. MySQLで現在の日付に11日を追加する方法【DATE_ADD関数の使い方】

    はじめにMySQLでは、DATE_ADD()関数を使うことで、日付に指定した日数を簡単に加算できます。本記事では、現在の日付(CURDATE())に11日を追加する方法を、テーブル作成からクエリ実行まで具体的な例を交えて解説します。サンプルテーブルの作成まず、デモ用のテーブルを作成しましょう。mysql> create table DemoTable1994 ( ArrivalDate date ); Query OK, 0 rows affected (5.33 sec)テストデータの挿入続いて、INSERTコマンドを使用してテーブルに複数のレコードを挿入します。mysql&g

  2. MySQLでTRUE/FALSEのレコードを0/1として表示する方法

    MySQLでTRUE/FALSEのレコードを0/1として表示する方法MySQLでは、カラムのデータ型をBOOLEANとして定義することで、TRUE/FALSEの値が自動的に0と1として表示されます。BOOLEAN型は内部的にはTINYINT(1)のエイリアスであり、TRUEは1、FALSEは0として扱われます。以下、具体的な手順を解説します。1. テーブルの作成まず、BOOLEAN型のカラムを含むテーブルを作成しましょう。mysql> create table DemoTable2035     -> (