SQL 関数一覧 (E‐N) > FROM_TZ、NEW_TIME、TZ_OFFSET

タイムゾーン付きの日付に変換、タイムゾーンの変更、オフセットの取得

syntax

FROM_TZ ( timestamp , time_zone )
NEW_TIME ( date , time_zone_tzd_from , time_zone_tzd_to )
return [ timestamp with timezone | date ]

syntax

TZ_OFFSET ( time_zone )
return [ timze_zone_offset ]

parameter

timestampタイムスタンプ式 TIMESTAMP 型
date日付式 DATE 型
time_zoneタイムゾーン・オフセット、または、タイムゾーン名
time_zone_tzd_[from,to]一部に限定された(夏時間を含む)タイムゾーン略名

return

  • 日付式にタイムゾーン付の情報を加工して加えタイムゾーン付きタイムスタンプにして戻す。
  • タイムゾーン・オフセットを戻す。

avail

  • SQL および PL/SQL の両方で使用可能。

タイムゾーン略名

NEW_TIME 関数ではアメリカ・カナダおよびグリニッジ標準時しか対象としていない。「まだ?」国際化されていない関数のため日本のタイムゾーンへの変換には使用できない。国際的なタイムゾーンの変換ではなくサマータイム処理のために用意された関数かもしれない。

 

FROM_TZ 関数の内容

タイムスタンプ式 timestamp に タイムゾーン timezone を付加して タイムゾーン付きのタイムスタンプに変換する。

NEW_TIME 関数の内容

タイムゾーン time_zone_tzd_from における 日時式 date を タイムゾーン time_zone_tzd_to における日時に変換する。※ 戻り値のデータ型は DATE 型。しかし、日本のタイムゾーンでは使えない。FROM_TZ と AT TIME ZONE 式 を使用して代替式は作成できる。⇒ FROM_TZ 使用例 参照

TZ_OFFSET 関数の内容

タイムゾーン名 time_zone 、または、DBTIMEZONE、SESSIONTIMEZONE におけるタイムゾーン・オフセット値を戻す。

TZ_OFFSET 使用例

日本のタイムゾーンのオフセット

SQL> select TZ_OFFSET('Asia/Tokyo') tokyo, TZ_OFFSET('japan') jpn,
  2         TZ_OFFSET(sessiontimezone) stz1, sessiontimezone stz2 from dual;
 
TOKYO           JPN             STZ1            STZ2
--------------- --------------- --------------- ---------------
+09:00          +09:00          +09:00          +09:00

FROM_TZ 使用例

NEW_TIME の代替式:dt 列を tz_from 列のタイムゾーンから tz_to 列のタイムゾーンに変換する。

SQL> select dt, tz_from, tz_to,
  2        FROM_TZ(cast(dt AS timestamp), tz_offset(tz_from))
  3         at time zone tz_offset(tz_to) another_time
  4  from from_tz_sample;
 
DT                   TZ_FROM         TZ_TO ANOTHER_TIME
-------------------- --------------- ----- -----------------------------------
2000-01-01 00:00:00  Asia/Tokyo      JAPAN 2000-01-01 00:00:00.000000 +09:00
1999-12-31 12:00:00  Canada/Atlantic JAPAN 2000-01-01 00:00:00.000000 +09:00
1999-12-31 05:00:00  US/Hawaii       JAPAN 2000-01-01 00:00:00.000000 +09:00

上の FROM_TZ 〜 式は NEW_TIME 関数を一般化した式なのでセッションタイムゾーンに変換したいだけなら、少し簡単に書ける。

SQL> select dt, tz_from,
  2         FROM_TZ(cast(dt AS timestamp), tz_offset(tz_from))
  3          AT LOCAL another_time
  4  from from_tz_sample;
 
DT                   TZ_FROM         ANOTHER_TIME
-------------------- --------------- -----------------------------------
2000-01-01 00:00:00  Asia/Tokyo      2000-01-01 00:00:00.000000 +09:00
1999-12-31 12:00:00  Canada/Atlantic 2000-01-01 00:00:00.000000 +09:00
1999-12-31 05:00:00  US/Hawaii       2000-01-01 00:00:00.000000 +09:00


タイムゾーンに関連する内容

SQL 関数 - FROM_TZ,NEW_TIME,TZ_OFFSET 関連

 
アルファベット別 関数一覧 ショートカット
ABCDEFG
HILMNOP
RSTUVWX
日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ Oracle Web セミナー