Oracle SQLで異なるタイムゾーンの日時を設定・取得する方法

Oracle SQLで異なるタイムゾーンの日時を設定・取得する方法 Database

Oracleデータベースで異なるタイムゾーンの日時を設定したり取得する方法です。データベースのタイムゾーンとは異なるタイムゾーンの日時を取得したい場合に非常に便利です。例えばデータベースは日本時間で構築されているが、アメリカ・ニューヨークの時間を取得したい場合などに便利です。ここではデータベースの設定やOSの設定を変更せずに、データベース・セッションの任意のタイムゾーンの日時を取得する方法を解説します。

現在のセッションのタイムゾーンを確認する方法

現在のセッションで設定されているタイムゾーンを取得するには、次のSQLで確認することが出来ます。

SELECT SESSIONTIMEZONE FROM DUAL;

このSQLを実行することで、現在のセッションで設定されているタイムゾーンを取得することが出来ます。ここでは「+09:00」と表示されており、日本標準時が取得できていることが分かります。

SQL> SELECT SESSIONTIMEZONE FROM DUAL;

SESSIONTIMEZONE
----------------
+09:00

実際に現在の日時を取得するSQLを実行すると、日本時間の日時が取得できていることが分かります。CURRENT_TIMESTAMPを使うと、タイムゾーン情報も表示されます(+09:00)。

-- 日時を分かりやすい表記に変更
SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';

SQL> SELECT CURRENT_DATE FROM DUAL;

CURRENT_DATE
-------------------
2025-07-19 14:26:44

SQL> SELECT CURRENT_TIMESTAMP FROM DUAL;

CURRENT_TIMESTAMP
-------------------------------
25-07-19 14:24:18.346491 +09:00

なお、SYSDATEやSYSTIMESTAMPだと、OSのタイムゾーンを利用してしまいますので、ここでセッションでタイムゾーンを変更した場合には、CURRENT_DATEまたはCURRENT_TIMESTAMPを使うようにして下さい。

セッションのタイムゾーンを変更する方法

セッションのタイムゾーンを変更するには、次のようにALTER SESSION SET TIME_ZONE = ‘タイムゾーン’;というSQLを実行します。「タイムゾーン」には、設定したいタイムゾーンの名前や世界標準時からの差を設定します。

ALTER SESSION SET TIME_ZONE = 'タイムゾーン';

例えばアメリカ・ニューヨークのタイムゾーンを設定する場合は次のようにします。「America/New_York」または「-05:00」を設定することによって、セッション中のタイムゾーンをアメリカ・ニューヨークに設定することが出来ます。

ALTER SESSION SET TIME_ZONE = 'America/New_York';
ALTER SESSION SET TIME_ZONE = '-05:00';

上記のどちらかのSQLを実行することによって、セッション中のタイムゾーンが変わっていることを確認できます。

-- タイムゾーンを America/New_York に設定した場合

SQL> ALTER SESSION SET TIME_ZONE = 'America/New_York';
SQL> SELECT SESSIONTIMEZONE FROM DUAL;

SESSIONTIMEZONE
----------------
America/New_York

SQL> SELECT CURRENT_DATE FROM DUAL;

CURRENT_DATE
-------------------
2025-07-19 00:42:59

SQL> SELECT CURRENT_TIMESTAMP FROM DUAL;

CURRENT_TIMESTAMP
---------------------------------------------------------------------------
25-07-19 00:43:04.922707 AMERICA/NEW_YORK


-- タイムゾーンを -05:00 に設定した場合

SQL> ALTER SESSION SET TIME_ZONE = '-05:00';
SQL> SELECT SESSIONTIMEZONE FROM DUAL;

SESSIONTIMEZONE
---------------
-05:00

SQL> SELECT CURRENT_DATE FROM DUAL;

CURRENT_DATE
-------------------
2025-07-19 00:42:06

SQL> SELECT CURRENT_TIMESTAMP FROM DUAL;

CURRENT_TIMESTAMP
-------------------------------
25-07-19 00:42:20.919924 -05:00

同じように、次のようにして任意のタイムゾーンを設定することも出来ます。

-- 世界標準時
ALTER SESSION SET TIME_ZONE = 'UTC';
ALTER SESSION SET TIME_ZONE = 'Etc/GMT';
ALTER SESSION SET TIME_ZONE = 'Europe/London';
ALTER SESSION SET TIME_ZONE = '+00:00';

-- アメリカ・ニューヨーク時間
ALTER SESSION SET TIME_ZONE = 'America/New_York';
ALTER SESSION SET TIME_ZONE = '-05:00';

-- ハワイ・ホノルル時間
ALTER SESSION SET TIME_ZONE = 'Pacific/Honolulu';
ALTER SESSION SET TIME_ZONE = '-10:00';

-- 日本標準時
ALTER SESSION SET TIME_ZONE = 'Asia/Tokyo';
ALTER SESSION SET TIME_ZONE = '+09:00';

また、次のように「LOCAL」というローカル・タイムゾーンを設定することにより、サーバーのOSの時間に設定することも可能です。ここではサーバーは日本時間に設定されていますので、日本時間の日時が取得されています。

SQL> ALTER SESSION SET TIME_ZONE = LOCAL;

SQL> SELECT CURRENT_TIMESTAMP FROM DUAL;

CURRENT_TIMESTAMP
-------------------------------
25-07-19 14:46:08.914883 +09:00

次のように「DBTIMEZONE」というデータベースのタイムゾーンを設定することによって、データベースに設定されたタイムゾーンの日時を取得することも可能です。ここではデータベースは世界標準時(UTC)に設定していますので、世界標準時の日時が取得されています。

SQL> ALTER SESSION SET TIME_ZONE = DBTIMEZONE;

Session altered.

SQL> SELECT CURRENT_TIMESTAMP FROM DUAL;

CURRENT_TIMESTAMP
-------------------------------
25-07-19 05:48:57.144373 +00:00

まとめ

ここまで見てきたように、データベースやOSの設定を変更せずに、任意のタイムゾーンの日時を簡単に取得することが出来ます。様々な国や地域向けのアプリケーションを開発したりする場合、様々なタイムゾーンでの日時を表示できるようになりますので非常に便利です。

タイトルとURLをコピーしました