BETWEENの使い方 – わかりやすい実務で使えるSQL

sql

実践で使えるSQL講座です
20年の実務経験を元に、机上でなく実践で役立つ知識を紹介します

要点 BETWEENの使い方

範囲抽出ができます

 項目名 BETWEEN 小さい値 AND 大きい値

小さい値大きい値の間の項目名を探すという意味です。

  項目名 >= 小さい値
AND 項目名 <= 大きい値

と同じ意味です。
数字でも日付でも使えます。
履歴でデータをもっている場合はよく使います。

解説

BETWEENがあるのは、シンプルにわかりやすく書けるからです。
わかりやすく書くのはプログラムで一番重要です。

数字と日付に使います。文字列も使えますが、普通は使わないです。
以上と以下で指定した値を含むということに注意してください。

項目名 BETWEEN 小さい値 AND 大きい値

と書きましたが、項目名も値も区別なく使えます

 BETWEEN 小さい項目名 AND 大きい項目名

としても大丈夫です。
時間別の履歴データを持つシステムでしたら、
この使い方の方が多いです。
サンプルは下にかいてありますので参照ください

注意点 実務でのあるある

日付を使う場合は時間に注意

履歴データを検索します。
このテーブルの意味は2019年はABC会社でしたが、
2020年にAAA会社と社名変更したというサンプルです

顧客名開始日終了日
ABC会社2019-01-012019-12-31
AAA会社2020-01-012020-12-31

今日の2020年5月5日の会社名はこのSQLを使用します。
‘AAA会社’と結果が返ってきます
*Oracleのデータベースを使用した時のサンプルです。SYSDATEは今日の日時を返します

SELECT
*
FROM 顧客テーブル
WHERE
    SYSDATE BETWEEN 有効開始日 AND 有効終了日

では2019年12月31日時点でこのSQLを実行したとします。
そしたら顧客名は何と帰ってくるでしょうか?

答えは結果が返ってこないです。

というのもSYSDATEは時間までデータを持っています。
10時10分に実行したらこうなります
2010-12-31 10:10

わかりやすいように書くと

'2019-12-31 10:10' BETWEEN '2019-01-01 00:00' AND '2019-12-31 00:00'

となるので、抽出されないのです。
日付を使う場合は時間まで含まれているか注意しないといけません。

修正すると下のようになります。
TRUNCはOracleでは切り捨てをする関数で、
日付データに使うと時間が切り捨てられます

SELECT
*
FROM 顧客テーブル
WHERE
TRUNC(SYSDATE) BETWEEN 有効開始日 AND 有効終了日

まとめ

 (項目名 or 値) BETWEEN (項目名 or 値) AND (項目名 or 値)
タイトルとURLをコピーしました
Close Bitnami banner
Bitnami