SQLで特定の日付データだけを抽出したいといったケースは頻繁に訪れます。
本記事では、SQLで日付を範囲指定して抽出条件を絞るやり方について、サンプルコードを交えながらご紹介していきたいと思います。
目次
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つの条件を指定することが可能です。
短期集中でWebエンジニアになれるスクール
指定した日付「以前」のデータを取得する
指定した日付以前のデータを取得したい場合には、「小なり(<)」または「小なりイコール(<=)」を条件に指定します。
基本構文
指定した日付以前のデータを取得するための基本構文は下記の通りです。
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の構成を確認して、適切なデータをきちんと取得出来るよう、スキルを身につけていきましょう。
SQLを学んでWebエンジニアを目指そう
Webエンジニアは、Webサービスを作るエンジニアで非常に人気の高い職種です。
スタートアップやベンチャー企業が中心なので柔軟性のある雇用形態、魅力的な作業環境、面白いプロジェクト、高い報酬など非常に魅力的な求人が多いです。
Ruby on RailsやGo言語を用いたプロジェクトが多く、SQLも重要なスキルとなります。
このブログを運営するプログラミングスクールのポテパンキャンプでは、実践的なカリキュラムと現役エンジニアからのレビュー、そしてポートフォリオ添削や模擬面談などの面談転職サポートにより、最短距離でWebエンジニアを目指すことができます。
Webエンジニアへの転職を考えている方は、是非一度無料カウンセリングへお申込みください。
今回のサンプルではMySQLを利用して動作確認を行っています。