ここでの私の要件は、日付型の列から GMT/UTC で時間を取得することです。しかし、キャストを使用して日付をタイムスタンプにキャストすると、セッションのタイムゾーンが GMT に設定されていても、参照として米国/太平洋タイムゾーンが使用されます。したがって、from_tz を使用しない限り、望ましい結果が得られません。GMTを常に参照するために変更する必要があるOracle SQLのタイムゾーン設定は他にありますか?
alter session set time_zone='+00:00';
select sessiontimezone from dual;
select current_timestamp from dual;
select sys_extract_utc(cast (sysdate as timestamp)) from dual;
select sys_extract_utc(from_tz(cast (sysdate as timestamp), '-07:00')) from dual;
select sys_extract_utc(current_timestamp) from dual;
Session altered.
SESSIONTIMEZONE
---------------------------------------------------------------------------
+00:00
CURRENT_TIMESTAMP
---------------------------------------------------------------------------
11-APR-16 08.46.42.292173 AM +00:00
SYS_EXTRACT_UTC(CAST(SYSDATEASTIMESTAMP))
---------------------------------------------------------------------------
11-APR-16 01.46.42.000000 AM
SYS_EXTRACT_UTC(FROM_TZ(CAST(SYSDATEASTIMESTAMP),'-07:00'))
---------------------------------------------------------------------------
11-APR-16 08.46.42.000000 AM
SYS_EXTRACT_UTC(CURRENT_TIMESTAMP)
---------------------------------------------------------------------------
11-APR-16 08.46.42.295310 AM
Tasks テーブルには、task_started という日付型の列があります。この日付フィールドから UTC 時間を取得しようとしています。その一環として、データを挿入しているときにセッションのタイムゾーンを GMT に変更しようとしていたので、タイムスタンプに単純にキャストして戻すことができましたが、これは機能していません。
select task_started from tasks where rownum <2;
TASK_STAR
---------
10-APR-16
desc tasks;
Name Null? Type
----------------------------------------- -------- ----------------------------
...
TASK_STARTED DATE
...