🚣

【PostgreSQL】SQLでTO_TIMESTAMPを使用する際にタイムゾーンを含めたい

2022/08/15に公開

概要

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

ログインするとコメントできます