初心者必見!PostgreSQLのBETWEENで日付を比較する方法

こんにちは、井上です。
 
PostgreSQLで日付のデータを扱う際、WHERE句で日付の範囲を指定してデータを取得することが頻繁にあります。その際に役立つBETWEENを使った書き方を紹介させていただきます!

BETWEENを使う方法

比較演算子を使わずにBETWEEN構文を使うことで、設定した期間内のデータを検索することができます。

比較データ BETWEEN 始点日付 AND 終点日付
 

上記では、比較データが始点日付以降かつ終点日付以前のデータが検索されます。

同じ条件を比較演算子を使用して表記すると、下記となります。

始点日付 <= 比較データ AND 比較データ <= 終点日付
 

ここで気を付けるポイントは、検索結果には始点日付及び終点日付のデータが含まれるということです。
 
では実際にBETWEENを使ってデータを抽出してみましょう。

id イベント名 開催日
1 入学式 2024/04/02
2 体育祭 2024/06/01
3 文化祭 2024/11/02
4 卒業式 2025/03/09

上記のようなデータを持つ「イベント」という名前のテーブルに、下記のSQLを実行します。

select * from イベント
where 開催日 between '2023/06/01' and '2023/11/30'

実行結果は下記になります。

id イベント名 開催日
2 体育祭 2024/06/01
3 文化祭 2024/11/02

NOT BETWEENを使う方法

NOT BETWEEN構文を使うことで、設定した期間を除くデータを検索することができます。

比較データ NOT BETWEEN 始点日付 AND 終点日付
 

上記では、始点日付より前または終点日付より後のデータが検索されます。

同じ条件を比較演算子を使用して表記すると、下記となります。

比較データ < 始点日付 OR 終点日付 < 比較データ
 

ここで気を付けるポイントは、検索結果には始点日付及び終点日付のデータは含まれないということです。
 
では実際にNOT BETWEENを使ってデータを抽出してみましょう。

id イベント名 開催日
1 入学式 2024/04/02
2 体育祭 2024/06/01
3 文化祭 2024/11/02
4 卒業式 2025/03/09

上記のようなデータを持つ「イベント」という名前のテーブルに、下記のSQLを実行します。

select * from イベント
where 開催日 not between '2024/06/01' and '2024/11/30'

実行結果は下記になります。

id イベント名 開催日
1 入学式 2024/04/02
4 卒業式 2025/03/09

比較演算子を使った比較方法

参考として、比較演算子での比較についても掲載します。
 
ここでは、例としてDate型のデータで比較する場合を紹介します。

比較式 検索結果
比較データ > 2020/01/01 2020/01/01より後のデータ (2020/01/01を含まない)
比較データ >= 2020/01/01 2020/01/01以降のデータ(2020/01/01を含む)
比較データ < 2020/01/01 2020/01/01より前のデータ(2020/01/01を含まない)
比較データ <= 2020/01/01 2020/01/01以前のデータ(2020/01/01を含む)
比較データ = 2020/01/01 2020/01/01のデータ
比較データ <> 2020/01/01 2020/01/01以外のデータ

まとめ

比較演算子は感覚的に分かりやすく、BETWEEN構文では期間を設定した検索で使いやすいなど、それぞれ強みがあるので状況に応じてどちらも使えるようにしていきましょう!
 
それでは。
 
 
 
 
《関連記事》

UNIONを使ってみた
技術
2022.7.20(Wed)

PostgreSQLで検索結果を結合する! UNIONを使ってみた

#SQL

日付の変換・加算・結合
技術
2023.8.1(Tue)

PostgreSQLで日時を扱うTIPS7選! 日付の変換・加算・結合

#SQL#技術

時間帯・曜日別に集計するSQL
データべース技術
2023.11.10(Fri)

PostgreSQLで時系列データを分析! 時間帯・曜日別に集計するSQL

#データベース#SQL

記事をシェア
MOST VIEWED ARTICLES