あなたの質問には少し混乱があります:
日付コード> データ型はタイムゾーンコンポーネントを保存しません。
TIMESTAMP WITH TIME ZONE
を挿入すると、この情報は切り捨てられ、永久に失われます。Date
に 。- 日付を画面に表示する場合、または文字API(XML、ファイルなど)を介して別のシステムに送信する場合は、
TO_CHAR
を使用します。 働き。 Oracleでは、日付
フォーマットはありません :それはある時点です。 - 相互に、
TO_TIMESTAMP_TZ
を使用しますVARCHAR2
を変換するにはTIMESTAMP
に 、ただし、これはDate
を変換しませんTIMESTAMP
に 。 -
FROM_TZ
を使用します タイムゾーン情報をTIMESTAMP
に追加します (またはDate
。 - Oracleでは、
CST
タイムゾーンですが、CDT
ではありません。CDT
夏時間の情報です。 - さらに複雑にするために、
CST / CDT
(-05:00
)およびCST / CST
(-06:00
)は明らかに異なる値になりますが、タイムゾーンCST
デフォルトでは、日付に応じて夏時間情報を継承します。
そのため、変換は見た目ほど単純ではない可能性があります。
Date
を変換したいとします d
タイムゾーンCST/ CST
で有効であることがわかっていること タイムゾーンCST/ CDT
で同等のものに 、次を使用します:
SQL> SELECT from_tz(d, '-06:00') initial_ts,
2 from_tz(d, '-06:00') at time zone ('-05:00') converted_ts
3 FROM (SELECT cast(to_date('2012-10-09 01:10:21',
4 'yyyy-mm-dd hh24:mi:ss') as timestamp) d
5 FROM dual);
INITIAL_TS CONVERTED_TS
------------------------------- -------------------------------
09/10/12 01:10:21,000000 -06:00 09/10/12 02:10:21,000000 -05:00
ここでは、デフォルトのタイムスタンプ形式が使用されています。形式を明示的に指定できます:
SQL> SELECT to_char(from_tz(d, '-06:00'),'yyyy-mm-dd hh24:mi:ss TZR') initial_ts,
2 to_char(from_tz(d, '-06:00') at time zone ('-05:00'),
3 'yyyy-mm-dd hh24:mi:ss TZR') converted_ts
4 FROM (SELECT cast(to_date('2012-10-09 01:10:21',
5 'yyyy-mm-dd hh24:mi:ss') as timestamp) d
6 FROM dual);
INITIAL_TS CONVERTED_TS
------------------------------- -------------------------------
2012-10-09 01:10:21 -06:00 2012-10-09 02:10:21 -05:00