バナー画像

SQLで特定の日付データだけを抽出したいといったケースは頻繁に訪れます。

本記事では、SQLで日付を範囲指定して抽出条件を絞るやり方について、サンプルコードを交えながらご紹介していきたいと思います。

ポテパンダの一言メモ

今回のサンプルではMySQLを利用して動作確認を行っています。

SQLの日付範囲指定で使用するサンプルテーブル


SQLでの日付範囲指定の紹介を始める前に、本記事で利用するテーブルについて掲載しておきます。

今回使用するのは「test1」という下記のデータが格納されたテーブルのみです。

test1

+------+---------------------+
| id   | date                |
+------+---------------------+
|    1 | 2020-07-26 14:00:00 |
|    2 | 2020-07-27 13:00:00 |
|    3 | 2020-07-28 14:00:00 |
|    4 | 2020-07-29 15:00:00 |
|    5 | 2020-08-28 14:00:00 |
|    6 | 2021-07-28 14:00:00 |
+------+---------------------+

SQLで日付を範囲指定して抽出条件を絞るやり方


SQLで日付を範囲指定して抽出条件を絞るためには大きく分けて3つの条件を指定することが可能です。

指定した日付「以前」のデータを取得する

指定した日付以前のデータを取得したい場合には、「小なり(<)」または「小なりイコール(<=)」を条件に指定します。

基本構文

指定した日付以前のデータを取得するための基本構文は下記の通りです。

SELECT カラム名(, カラム名, ...)
FROM テーブル名
WHERE カラム名 <(<=) 日付;

サンプル

実際に上記のサンプルテーブルを使用して動作を確認してみましょう。

サンプルでは、「2020-07-28 14:00:00」以前のデータを取得するSQLを作成しました。

SELECT *
FROM test1
WHERE date < '2020-07-28 14:00:00';

実行した結果が下記の通りです。

+------+---------------------+
| id   | date                |
+------+---------------------+
|    1 | 2020-07-26 14:00:00 |
|    2 | 2020-07-27 13:00:00 |
+------+---------------------+

ちなみに指定した日時「2020-07-28 14:00:00」を含めたい場合には「小なりイコール(<=)」を指定します。

SELECT *
FROM test1
WHERE date <= '2020-07-28 14:00:00';

実行した結果が下記の通りです。

+------+---------------------+
| id   | date                |
+------+---------------------+
|    1 | 2020-07-26 14:00:00 |
|    2 | 2020-07-27 13:00:00 |
|    3 | 2020-07-28 14:00:00 |
+------+---------------------+

指定した日付「以降」のデータを取得する

指定した日付以降のデータを取得したい場合には、「大なり(>)」または「大なりイコール(>=)」を条件に指定します。

基本構文

指定した日付以降のデータを取得するための基本構文は下記の通りです。

SELECT カラム名(, カラム名, ...)
FROM テーブル名
WHERE カラム名 >(>=) 日付;

サンプル

今回のサンプルでは現在日時(2020-07-28 14:30:00)以降のデータを取得するSQLを作成しました。

SELECT *
FROM test1
WHERE date > now();

実行した結果が下記の通りです。

+------+---------------------+
| id   | date                |
+------+---------------------+
|    4 | 2020-07-29 15:00:00 |
|    5 | 2020-08-28 14:00:00 |
|    6 | 2021-07-28 14:00:00 |
+------+---------------------+

2つの指定した日付の範囲内に当たるデータを取得する

2つの指定した日付の範囲内に当たるデータを取得したい場合には「BETWEEN」を利用します。

基本構文

指定した日付の範囲内に当たるデータを取得するための基本構文は下記の通りです。

SELECT カラム名(, カラム名, ...)
FROM テーブル名
WHERE カラム名 BETWEEN 日付 AND 日付;

サンプル

今回のサンプルでは2020年7月のデータを取得するようなSQLを作成しています。

SELECT *
FROM test1
WHERE date BETWEEN '2020-07-01 00:00:00' AND '2020-07-31 23:59:59';

実行した結果が下記の通りです。

+------+---------------------+
| id   | date                |
+------+---------------------+
|    1 | 2020-07-26 14:00:00 |
|    2 | 2020-07-27 13:00:00 |
|    3 | 2020-07-28 14:00:00 |
|    4 | 2020-07-29 15:00:00 |
+------+---------------------+

SQLでの日付範囲指定(応用)


上述した内容で、基本的な日付の範囲指定したデータ抽出方法をご確認頂きました。

ここからはMySQLで提供されている日付変換用の関数を使用して、少し応用した日付範囲の指定を試してみたいと思います。

加算処理を条件に追加する

加算処理には、MySQLから提供されている関数「DATE_ADD」を利用すれば簡単に実現可能です。

DATE_ADD(日付, INTERVAL 値 単位)

サンプル

例えば取得したい日付の範囲として、今日(2020/7/28)から3日後以降のデータだけをSQLで抽出したいとします。

SELECT *
FROM test1
WHERE date > DATE_ADD('2020-07-28 00:00:00', INTERVAL 3 DAY);

実行した結果が下記の通りです。

+------+---------------------+
| id   | date                |
+------+---------------------+
|    5 | 2020-08-28 14:00:00 |
|    6 | 2021-07-28 14:00:00 |
+------+---------------------+

減算処理を条件に追加する

反対に減算処理を実施したい場合、MySQLから提供されている関数「DATE_SUB」を利用すれば実現可能です。

DATE_SUB(日付, INTERVAL 値 単位)

サンプル

取得したい日付の範囲として、現在日時(2020-07-28 14:30:00)から10時間前以前のデータだけをSQLで抽出したいとします。

SELECT *
FROM test1
WHERE date < DATE_SUB(now(), INTERVAL 10 HOUR);

実行した結果が下記の通りです。

+------+---------------------+
| id   | date                |
+------+---------------------+
|    1 | 2020-07-26 14:00:00 |
|    2 | 2020-07-27 13:00:00 |
+------+---------------------+

さいごに:SQLでの日付範囲指定は超頻出処理


本記事では、SQLで日付範囲を指定してデータを抽出するやり方について、ご紹介してきました。

最後にご紹介した関数を利用したデータ取得に関しては、データベース毎に利用出来る関数が異なるため注意が必要です。

SQLで、日付範囲指定してのデータ抽出処理は超頻出処理の1つです。

1つ1つSQLの構成を確認して、適切なデータをきちんと取得出来るよう、スキルを身につけていきましょう。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。