PostgreSQL サーバーでタイムゾーンを変換する

Bilal Shahid 2024年2月15日
  1. PostgreSQL サーバーでタイムゾーンを変換する
  2. timezone() 関数とタイムゾーンを変換するためのその使用法
  3. SQL クエリを使用してタイムスタンプ値を異なるタイムゾーンに変換する
  4. タイムゾーンを変換するための重要な SQL ステートメント
PostgreSQL サーバーでタイムゾーンを変換する

テーブルに保存されているタイムスタンプ値を PostgreSQL の別のタイムゾーンに変換しますか? この記事では、保存されているタイムスタンプ値を別のタイムゾーンに変換する手順について説明します。

PostgreSQL サーバーでタイムゾーンを変換する

あるタイムスタンプ値を別のタイムゾーンに変換するには、さまざまな方法があります。 この記事では、次の 2つの方法について説明します。

  1. timezone() 関数の使用
  2. SQLクエリの使用

それらのいずれかに従って、タイムスタンプをあるタイムゾーンから別のタイムゾーンに変換できます。

timezone() 関数とタイムゾーンを変換するためのその使用法

PostgreSQL サーバーは、タスクを迅速かつ効率的に実行するのに役立つ多数のユーザー機能を提供します。 ただし、timezone() 関数を使用する前に、詳しく説明しましょう。

timezone() 関数は、あるタイムスタンプ値を別のタイムゾーンに変換するために使用されます。 timezone() 関数の構文は次のとおりです。

timezone(zone, timestamp)

上記のように、timezone() 関数は 2つの引数を取ります。 最初の引数 zone は、タイムスタンプ引数を変換するタイムゾーンを表します。

2 番目の引数 timestamp は、別のタイムゾーンに変換するタイムスタンプ値を表します。

timezone() 関数の戻り値は、タイムスタンプの値によって異なります。 元のタイムスタンプ値にタイムゾーンが含まれている場合、関数は別の値を返します。

一方、タイムスタンプ値 DOES NOT にタイムゾーンがある場合、返される値は異なります。 以下のコード例でそれを理解しましょう。

タイムゾーン付きのタイムスタンプを含むコード例

このセクションの例では、タイムスタンプ引数にタイムゾーンが含まれる timezone() 関数を使用しています。 以下は PostgreSQL の SQL ステートメントです。

SELECT timezone('PST', timestamp with time zone '2020-10-25 00:00:00+00');

timezone() 関数は、2 番目の引数で指定されたタイムスタンプ値を、最初の引数で指定されたタイムゾーンに変換します。

戻り値にはタイムゾーンがありません。 したがって、上記のクエリの結果は次のようになります。

postgresql サーバーでタイムゾーンを変換 - 画像 1

この例では、入力タイムスタンプ値のタイムゾーンを変更します:

SELECT timezone('PST', timestamp with time zone '2020-10-25 00:00:00+01');

出力:

postgresql サーバーでタイムゾーンを変換 - 画像 2

timezone() 関数を引数 "timestamp with timezone" で使用し、タイムスタンプでタイムゾーンを指定しないとします。 次に、引数の元のタイムスタンプがローカル タイムゾーンに変換されます。

SELECT timezone('PST', timestamp with time zone '2020-10-25 00:00:00');

出力:

postgresql サーバーでタイムゾーンを変換 - 画像 3

返されたタイムスタンプが 11 時間進んでいることがわかります。これは、ローカル タイムゾーンが PST タイムゾーンより 11 時間遅れていることを意味します。

使用されているタイムゾーン オフセットを確認するには、次のクエリを実行します。

SELECT timestamp with time zone '2020-10-25 00:00:00';

出力:

postgresql サーバーでタイムゾーンを変換 - 画像 4

タイムゾーンなしのタイムスタンプを含むコード例

引数timestamp without timezoneで同じ例を実行できます。 結果は、タイムスタンプにタイムゾーン オフセットが含まれていても、現在のタイムゾーン設定を使用して元のタイムスタンプを変換します。

関数からの戻り値には、追加されたタイムゾーン オフセットが含まれます。 タイムゾーン オフセットを含まない PostgreSQL のクエリを次に示します。

SELECT timezone('PST', timestamp without time zone '2020-10-25 00:00:00+00');

したがって、上記のクエリの結果は次のようになります。

postgresql サーバーでタイムゾーンを変換 - 画像 5

次の例には、タイムゾーン オフセットが含まれています。

SELECT timezone('PST', timestamp without time zone '2020-10-25 00:00:00+12');

上記のクエリの結果は、タイムゾーン オフセットなしで得られた結果と同じです。

postgresql サーバーでタイムゾーンを変換 - 画像 5

"timestamp without timezone" 引数の概念を理解するには、次のクエリを参照してください。

SELECT timestamp without time zone '2020-10-25 00:00:00+12';

出力:

postgresql サーバーでタイムゾーンを変換 - 画像 6

注: timezone() 関数は多数の引数とともに使用できます。 localtimestamp または current_timestamp 引数を指定して timezone() 関数を使用してみてください。 引数timestamp with/ without timezoneは、time with/ without timezoneという時間値とともに使用することもできます。

SQL クエリを使用してタイムスタンプ値を異なるタイムゾーンに変換する

ここでは、関数を使用せずにタイムスタンプ値を別のタイムゾーンに変換するために PostgreSQL で実行できるいくつかの SQL ステートメントについて説明します。

最初のクエリは、タイムスタンプとタイムゾーンを選択します。 SQL ステートメントを使用した変換を以下に示します。

SELECT (timestamp'2020-10-25 00:00:00') AT TIME ZONE 'PST';

出力:

postgresql サーバーでタイムゾーンを変換 - 画像 7

注: 必要なタイム ゾーンのいずれかでクエリを実行できます。 簡単にするために、記事全体で使用されるタイムゾーンは PST です。

タイムスタンプ値を別のタイムゾーンに変換する一般化されたクエリを次に示します。

SELECT ((stored_timestamp AT TIME ZONE 'UTC') AT TIME ZONE 'PST') AS local_timestamp FROM my_table;

クエリをより簡単な言葉で説明すると、PostgreSQL の my_table という名前のテーブルから stored_timestamp 属性を選択できます。

stored_timestamp タイムゾーンが一緒に提供され、次のタイムゾーンは、タイムスタンプを変換するタイムゾーンを表します。 結果は local_timestamp という名前になります。

タイムスタンプ値を別のタイムゾーンに変換する別のステートメントは次のとおりです。

SELECT '2020-10-25 00:00:00'::timestamp AT time zone 'PST';

クエリ 1 と同じ結果が生成されます。

postgresql サーバーでタイムゾーンを変換 - 画像 7

次のクエリは、上記のクエリの代替です。 タイムゾーンがわからない場合は、ゾーン間隔を使用してタイムスタンプをそのタイムゾーンに変換できます。

注: 以下のクエリは、PST のゾーン間隔を示していません。

SELECT '2020-10-25 00:00:00' :: timestamp AT time zone INTERVAL'+08:30';

ゾーン間隔 "+08:30" で受信したタイムスタンプは次のとおりです。

postgresql サーバーでタイムゾーンを変換 - 画像 8

タイムゾーンを変換するための重要な SQL ステートメント

タイムスタンプ値を別のタイムゾーン値に変換するために、PostgreSQL で使用できる 2つの重要な SQL ステートメントを次に示します。

次のステートメントは、現在のタイム ゾーンを返します。 したがって、タイムゾーンがわからない場合は、次のステートメントを実行します。

SHOW timezone;

PostgreSQL サーバーがサポートするさまざまなタイムゾーンに関心がある場合は、次のステートメントを使用します。

SELECT * FROM pg_timezone_names;

したがって、タイムスタンプ値を別のタイムゾーンに変換することは難しい作業ではありません。 PostgreSQL の単純な SQL ステートメントは、タイムスタンプ値を選択したタイムゾーンに変換するのに役立ちます。

著者: Bilal Shahid
Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub