0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PostgreSQL:BETWEENで日付の範囲を指定する|両端を含む条件とANDへの書き換え

0
Posted at

今回はPostgreSQLのBETWEENを使い、開業日が指定した範囲に入る施設を取得します。取得したデータの意味を整理します。

所要時間は15分ほどです。
それでは、さっそく始めていきましょう!

今日のテーマと到達目標

日付の範囲を自分で指定し、BETWEENと比較演算子による条件の関係を説明することが目標です。

用語の定義

用語 意味
下限 指定する範囲の始まりの値
上限 指定する範囲の終わりの値
BETWEEN 下限 AND 上限 下限以上、上限以下に入るかを判定する指定

BETWEENは下限と上限の両方を含みます。BETWEEN内のANDは、下限と上限を区切るために使います。

取得元はmobility.poisです。1行は1施設を表します。poi_idは施設ID、poi_nameは施設名、opened_dateはDATE型の開業日です。

2021年中に開業した施設を取得する

SELECT poi_id, poi_name, opened_date
FROM mobility.pois
WHERE opened_date BETWEEN DATE '2021-01-01'
                      AND DATE '2021-12-31'
ORDER BY poi_id;

このSQLを実行し、13施設を取得しました。実行画面の施設IDと開業日は次のとおりです。

poi_id opened_date
1 2021-01-15
4 2021-09-14
6 2021-07-25
11 2021-03-10
12 2021-06-06
17 2021-02-09
24 2021-12-25
26 2021-02-11
33 2021-09-07
36 2021-01-28
57 2021-07-16
63 2021-03-28
64 2021-01-06

「2021年12月31日ちょうどに開業した施設も条件に含まれるか」という質問には、「含まれる」と回答しました。上限を含むので正解です。これは条件の意味の確認であり、その日に開業した施設が実際の結果に存在するという意味ではありません。

自分で期間を指定する演習

次は、2022年1月1日から2023年12月31日までを指定するSQLを自分で書きました。

SELECT poi_id, poi_name, opened_date
FROM mobility.pois
WHERE opened_date BETWEEN DATE '2022-01-01'
                      AND DATE '2023-12-31'
ORDER BY poi_id;

実行結果は18行でした。

poi_id opened_date
3 2022-03-01
16 2022-04-18
18 2023-04-24
22 2023-04-17
27 2023-07-01
28 2022-11-19
29 2023-03-25
31 2022-03-13
32 2022-12-16
35 2023-05-15
37 2023-04-13
38 2023-04-24
45 2023-10-16
48 2023-09-02
50 2023-03-25
51 2023-03-12
56 2022-04-03
60 2023-11-13

件数を制限していないため、今回のデータで指定した期間に開業した施設は18件と確認できます。

比較演算子とANDで書き換える

同じ条件を、BETWEENを使わずに書き換えて実行しました。

SELECT poi_id, poi_name, opened_date
FROM mobility.pois
WHERE (opened_date >= DATE '2022-01-01')
  AND (opened_date <= DATE '2023-12-31')
ORDER BY poi_id;

こちらも同じ18施設が、同じ施設IDの順序で返りました。条件式の回答だけでなく、両方の実行結果を確認できました。

部分 指定している内容
opened_date >= DATE '2022-01-01' 開業日が下限と同じか、それより後
opened_date <= DATE '2023-12-31' 開業日が上限と同じか、それより前
AND 上の2条件の両方を満たす

BETWEENは、今回のような両端を含む範囲条件をまとめて書く方法です。

入力途中で書き直したいとき

演習中に、誤って入力した後に改行した場合のリセット方法も確認しました。

psqlでは、まだ実行していない入力を消すために次を使います。

\r

引用符の入力途中などでコマンドとして認識されない場合は、Control+Cで入力を中断して書き直せます。これらは実行済みのSQLを取り消す操作ではありません。

このリセット操作は説明を受けた内容であり、今回の画像で実行を確認したものではありません。

合格条件と学習記録

確認項目 確認できた内容
BETWEENで日付の範囲を指定できる 2021年中の13施設を取得
境界の日付を含むことを理解できる 上限の12月31日も含まれると回答
自分で範囲を変更できる 2022年から2023年の18施設を取得
比較演算子で書き換えられる >=、<=、ANDを使い、同じ18施設を取得

共有された演習SQLは正常に実行できました。

まとめ

BETWEEN 下限 AND 上限は両端を含む範囲指定です。今回のDATE型の条件では、>= 下限 AND <= 上限と同じ意味で使えます。日付の範囲を指定するときは、境界の日を含めたいかを確認します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?