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:日付でデータを絞り込む|以前・以降と境界日の扱い

0
Posted at

今回はPostgreSQLの日付条件を使い、施設の開業日で行を絞り込みます。取得したデータの意味を整理します。

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

今日のテーマと到達目標

日付・時刻の型を確認し、今回は日付の取得と条件指定を実習しました。指定した日付を含むかどうかに合わせて、条件式を書けることが目標です。

用語の定義

用語 意味
DATE 年月日を扱うデータ型。時刻は含まない
TIME 時・分・秒などの時刻を扱うデータ型
TIMESTAMP 日付と時刻を一緒に扱うデータ型
日付リテラル SQLに直接記述する日付の値

DATE '2021-01-01'は、2021年1月1日を日付の値として指定する書き方です。今回はDATE型を使い、時刻やタイムゾーンの操作は実習していません。

使用するTableと列

取得元は学習用データを取り込んだmobility.poisです。1行は1施設を表します。

列名 意味
poi_id 施設を識別するID
poi_name 施設名
opened_date 施設の開業日。DATE型

開業日を取得する

SELECT poi_id, poi_name, opened_date
FROM mobility.pois
ORDER BY poi_id
LIMIT 5;

実行画面では、施設IDが1から5の行を取得しました。

poi_id opened_date
1 2021-01-15
2 2019-11-11
3 2022-03-01
4 2021-09-14
5 2019-07-09

指定日以降の施設を取得する

次は、各施設の開業日が2021年1月1日と同じか、それより後の行を取得しました。

SELECT poi_id, poi_name, opened_date
FROM mobility.pois
WHERE opened_date >= DATE '2021-01-01'
ORDER BY poi_id
LIMIT 5;

実行結果の施設IDと開業日は次のとおりです。

poi_id opened_date
1 2021-01-15
3 2022-03-01
4 2021-09-14
6 2021-07-25
8 2024-01-12

LIMIT 5で件数を制限しているため、条件に合う施設の総数が5件という意味ではありません。

「より前」と「以前」を書き分ける

自分でSQLを書く演習では、「2021年1月1日より前」を指定する課題に対し、最初は次の条件を書きました。

WHERE opened_date <= DATE '2021-01-01'

SQLは実行できましたが、これは「2021年1月1日以前」です。その日ちょうども含むため、課題の条件と異なります。

そこで、<=を<に修正して再実行しました。

SELECT poi_id, poi_name, opened_date
FROM mobility.pois
WHERE opened_date < DATE '2021-01-01'
ORDER BY poi_id ASC
LIMIT 5;

修正後の実行結果は次のとおりです。

poi_id poi_name opened_date
2 Shinjuku_shopping_002 2019-11-11
5 Yokohama_office_005 2019-07-09
7 Omiya_hotel_007 2018-01-23
10 Shinjuku_shopping_010 2020-07-14
14 Kawasaki_park_014 2019-09-17

今回表示された5行は修正前と同じでした。ただし、条件の意味は異なります。表示結果が同じでも、指定日ちょうどの行を含める条件かどうかを確認する必要があります。

別の日付で確認する

最後に、2022年4月1日を使った2問に回答しました。

-- 2022年4月1日以前
WHERE opened_date <= DATE '2022-04-01'

-- 2022年4月1日より後
WHERE opened_date > DATE '2022-04-01'

2問とも正解でした。この2つは条件式を書く確認問題であり、実行結果を確認したSQLではありません。

合格条件と学習記録

確認項目 確認できた内容
日付の列を取得できる opened_dateを含む5行を取得
日付条件で絞り込める 2021年1月1日以降の行を取得
条件の誤りを修正できる 「より前」の条件を<=から<に修正して実行
別の日付でも条件を書ける 「以前」に<=、「より後」に>を指定

まとめ

指定したい条件 演算子 指定日ちょうどを含むか
以前 <= 含む
より前 < 含まない
以降 >= 含む
より後 > 含まない

日付条件では、基準の日を含めるかを確認して演算子を選びます。今回のSELECTは取得対象を絞る操作であり、元の開業日を書き換える操作ではありません。

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?