PostgreSQLのBETWEENとは
BETWEENは「指定した範囲内の値を抽出する」ための条件式です。
PostgreSQLでは、BETWEENを使うことで数値・日付・文字列などの「範囲検索」が簡単にできます。
例えば、売上金額が1000〜5000のデータだけを抽出したいとき、BETWEENを使うと直感的でわかりやすいSQLが書けます。
基本構文と数値の範囲検索
構文
SELECT 列名
FROM テーブル名
WHERE 列名 BETWEEN 下限値 AND 上限値;BETWEENは「下限値以上かつ上限値以下」を含みます(両端を含む)。
例えば、商品の価格が1000円〜5000円(1000円以上かつ5000円以下)の範囲を抽出するSQLは以下の通りです。
例:数値の範囲検索
SELECT product_name, price
FROM products
WHERE price BETWEEN 1000 AND 5000;このSQLは price >= 1000 AND price <= 5000 と同じ意味になります。
日付型でのBETWEENの使い方
PostgreSQLでは、BETWEENを日付型にも使えます。
売上日が「2024年1月1日〜2024年1月31日」のデータを抽出する場合、以下のように書けます。
SELECT order_id, order_date, total_amount
FROM orders
WHERE order_date BETWEEN '2024-01-01' AND '2024-01-31';
- PostgreSQLの
date型やtimestamp型に対応。 - 日付の範囲は「指定日を含む(inclusive)」ため、1月31日も含まれます。
文字列の範囲指定でのBETWEEN
文字列型でもBETWEENは使えます。
PostgreSQLでは、文字列を辞書順(アルファベット順)で比較します。
SELECT name
FROM customers
WHERE name BETWEEN 'A' AND 'C';この場合、「A」から始まり「C」までの文字列が対象になります。
ただし、CそのものやCa...なども含まれるため、あいまいな結果になりやすい点には注意が必要です。
文字列の部分一致検索をしたい場合は、LIKEやILIKEのほうが適しています。
NOT BETWEENの使い方と違い
範囲外のデータを取得したい場合は、NOT BETWEENを使います。
SELECT product_name, price
FROM products
WHERE price NOT BETWEEN 1000 AND 5000;これは price < 1000 OR price > 5000 (1000円未満または5000円より高い)と同じ意味になります。
範囲外データを簡潔に取得できるため、異常値チェックやレポート作成時に便利です。
BETWEENを使う際の注意点
注意1:両端を含む
BETWEENは 下限値と上限値の両方を含む 仕様です。
これを誤解して「上限値を含まない」と思い込むと、意図しない結果を返すことがあります。
注意2:NULL値にはマッチしない
BETWEENは NULL を含みません。
範囲内・範囲外どちらの条件でも、NULLは除外されます。
必要に応じて COALESCE() 関数でNULLを扱うと良いでしょう。
注意3:文字列比較は辞書順
「文字列順序」はロケール設定(照合順序)に依存する場合があります。
特に日本語を含むデータでは、意図した順序で比較されないことがあるため注意が必要です。
まとめ:BETWEENを正しく使って効率的なクエリを
BETWEENは、PostgreSQLで最も基本的かつ強力な条件指定の1つです。
- 数値・日付・文字列に対応
- 両端を含む
NOT BETWEENで範囲外も簡単に抽出
SQLをシンプルにし、可読性を高めるために積極的に活用しましょう。
ただし、NULL値や文字列比較の挙動には注意が必要です。
BETWEENを正しく使いこなすことで、PostgreSQLのクエリ作成効率が大きく向上します。

コメント