あなたの質問には少し混乱があります:
日付コード> データ型はタイムゾーンコンポーネントを保存しません。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