🚣
【PostgreSQL】SQLでTO_TIMESTAMPを使用する際にタイムゾーンを含めたい
概要
PostgreSQLでは列の型に、タイムゾーン付きのdatetime型を設定することができます。概要については、PostgreSQL の datetime with time zone 型を使うの記事を参照ください。
このタイムゾーン付きのdatetime型について、SQLのwhere句でタイムゾーンを含めて条件の絞り込みを行う場合どうすれば良いのか、今回メモ書きします。
対応
where句で日時を設定する場合、日付の文字列をTO_TIMESTAMP
に入れてdatetime型に変換するような対応を行うと思います。TO_TIMESTAMP
の概要については【PostgreSQL】任意の文字列をTimestampやDateに変換する方法の記事を参照ください。
タイムゾーンを含めたい場合、この文字列の日付フォーマットにタイムゾーンに該当するものを、設定すれば良さそうです。タイムゾーンについてはhours部分はTZH
、minutes部分はTZM
を設定します。日付フォーマットの詳細についてはPostgreSQL TO_TIMESTAMP function + Examplesの記事で解説されています。
SQLサンプル
2022-08-10 11:04:12 Z09:00
という日付の文字列を、SQLのwhere句でdatetime型に変換する場合、以下のようなSQLになります。
SELECT
*
FROM
sample_table
where
datetime_column <= TO_TIMESTAMP('2022-08-10 11:04:12 Z09:00', 'YYYY-MM-DD HH24:MI:SS ZTZH:TZM')
Discussion