ORACLE SQL 開始日と終了日の間の範囲にかかっている日付を取得する ホームページ制作 | 墨田区

ORACLE SQL 開始日と終了日の間の範囲にかかっている日付を取得する

LINEで送る
Pocket

実務の中では、契約期間やキャンペーン期間など、適用開始日付と適用終了日付を管理していくことがあります。
これらの日付の間(かかっている日付)をデータベースから取得したいという場合、ちょっと悩んでしまいますよね。
今回は SQL にてこれらの開始日と終了日の間を取得する方法 をご紹介します。




【PR】マジか?!「アレ」してるLINEスタンプっていったい・・・


まず、前提条件として、「開始日 ≦ 終了日」である必要があります。
画面などを使って検索する場合は、開始日と終了日が逆になっていないか、あらかじめバリデーションチェックを仕掛けておきましょう。

チェックする必要があるのは以下の2つになります。
・データ上の開始日 ≦ 検索条件の開始日
・検索条件の終了日 ≦ データ上の終了日
この2つの条件を満たす SQL を記述すれば取得は可能です。

具体的な SQL 条件指定する場合は、以下のようになります。
WHERE 検索条件の開始日 ≦ データ上の終了日
AND データ上の開始日 ≦ 検索条件の終了日

では、サンプルでチェックしていきましょう。

サンプル


以下のデータから、開始日が 2014/02/01,終了日が 2014/02/28 の間の範囲にかかっている日付を取得します。

テーブル名

DATE_RANGE

データ

START_DATEEND_DATE
2013/02/012014/01/31
2013/02/152013/08/14
2013/02/212014/02/20
2013/03/012013/03/31
2014/02/012099/12/31

SQL

SELECT * FROM DATE_RANGE
WHERE TO_DATE('2014/02/01','YYYY/MM/DD') <= END_DATE
AND START_DATE <= TO_DATE('2014/02/28','YYYY/MM/DD')

結果

START_DATEEND_DATE
2013/02/212014/02/20
2014/02/012099/12/31

範囲外にある日付データが除外された結果が得られました。
この日付範囲検索は、実務で本当によく利用されますので、しっかり覚えておきたいですね。

おつかれさまでした。

LINEで送る
Pocket

この記事がお役に立ちましたら シェア をお願いいたします。

コメント - Thank you for the comment.

  1.  

    終了日がNULLのデータを含む場合はどうなりますか?

    返信

     
    •  

      コメントありがとうございます。この条件では、終了日がNULLのレコードは取得できませんね。どのようなシチュエーションなのかわかりませんが、OR END_DATE IS NULL などの条件を追加する必要があります。ご検討ください。

      返信

       

コメントを残す

お名前 (必須)
メールアドレス
(アドレスは公開されません)

コメント(必須)

Trackback URL