バナー画像

データを抽出する際、日付を比較して条件に合ったデータのみを選択したいケースはよくあります。

本記事では、SQLのWHERE句で日付を比較する方法について、各処理をサンプル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の日付比較1: 同一日付


SQLで同一日付のデータを取得したい場合には「=(イコール)」演算子を利用します。

サンプル

今回のサンプルでは「2020-07-26 14:00:00」のデータと同一日付のデータを取得してみたいと思います。

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

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

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

完全一致のデータのみ取得可能

同一日付のデータを取得したい場合と記述しましたが、「=(イコール)」演算子では完全一致したデータのみしか取得出来ません。

例えば下記のように、時刻が異なる場合、同一日付でもデータを取得出来ません。

SELECT *
FROM test1
WHERE date = '2020-07-26 14:30:00';

同じく下記のように、日付のみを指定した場合にも同一データ無しと判定されます。

SELECT *
FROM test1
WHERE date = '2020-07-26';

日付のみで判定するためには?

ではDATETIME型で格納されたデータを日付のみで判定するためには、どうするのかというとMySQLの場合、DATE_FORMAT関数を利用することで実現可能です。

SELECT *
FROM test1
WHERE DATE_FORMAT(date, '%Y-%m-%d') = DATE_FORMAT(now(), '%Y-%m-%d');

これでテーブルに格納された日時と現在日時を日付のみの同じフォーマットに変換しています。

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

+------+---------------------+
| id   | date                |
+------+---------------------+
|    4 | 2020-07-29 15:00:00 |
+------+---------------------+

SQLの日付比較2: 以前の日付


SQLで指定した日付以前のデータを取得したい場合には「<(小なり)」または「<=(小なりイコール)」演算子を利用します。

サンプル

今回のサンプルでは「2020-07-29 00:00:00」の日付以前のデータを取得してみたいと思います。

SELECT *
FROM test1
WHERE date < '2020-07-29 00: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 |
+------+---------------------+

SQLの日付比較3: 以降の日付


SQLで指定した日付以降のデータを取得したい場合には「>(大なり)」または「>=(大なりイコール)」演算子を利用します。

サンプル

今回のサンプルでは「2020-07-28 14:00:00」の日付以降のデータ(同一日時を含む)を取得してみたいと思います。

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

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

+------+---------------------+
| id   | date                |
+------+---------------------+
|    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の日付比較4: 期間内の日付


SQLで指定した期間内の日付データを取得したい場合には「BETWEEN」を利用します。

サンプル

今回のサンプルでは「2020年7月」のデータを取得してみたいと思います。

「WHERE カラム名 BETWEEN 日付 AND 日付」で指定した2つの日付期間内のデータを取得します。

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の日付比較5: 期間外の日付


SQLで指定した期間内の日付データ以外を取得したい場合には「NOT BETWEEN」を利用します。

サンプル

今回のサンプルでは「2020年8月以外」のデータを取得してみたいと思います。

「WHERE カラム名 NOT BETWEEN 日付 AND 日付」で指定した2つの日付期間内のデータ以外を取得します。

SELECT *
FROM test1
WHERE date  NOT BETWEEN '2020-08-01 00:00:00' AND '2020-08-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 |
|    6 | 2021-07-28 14:00:00 |
+------+---------------------+

さいごに:SQLの日付比較はデータベースを扱う上での必須知識


本記事では、SQLの日付比較でデータを取得する方法についてご紹介してきました。

データベースを扱う上で日付を指定してデータを取得するケースは頻繁に訪れます。

しっかりと処理内容を理解して、適切なデータを取得出来るよう繰り返し練習してみましょう。

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

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

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

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

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

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

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

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

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

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

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