タイムゾーンを組み込んだ文字からTIMESTAMPへの変換には、以下のルールが適用されます。
- ターゲットのデータ型がタイムゾーンを指定しない場合、例えばTIMESTAMP(0)のソース文字列には、形式+hh:miまたは-hh:miのタイムゾーンを含めることができますが、それを指定できるのは時刻の直前または直後のみです。
例えば、以下の変換は正常に実行されます。
SELECT CAST ( '2008-09-19 11:23:44-02:00' AS TIMESTAMP(0) FORMAT 'Y4-MM-DDBHH:MI:SSBZ' );
以下の変換は、タイムゾーンと時刻との間のブランク分離文字が原因で失敗します。
SELECT CAST ( '2008-01-19 +02:00 11:23:44' AS TIMESTAMP(0) FORMAT 'Y4-MM-DDBZBHH:MI:SS' );
- ソースの文字列にタイムゾーンが含まれており、ターゲットのデータ型がタイムゾーンを指定していない場合、変換では文字列内のタイムゾーンを使用して、文字列を万国標準時(UTC)に変換します。これは、FORMAT句にタイムゾーンの書式設定文字が含まれているかどうかに関係なく実行されます。
SELECT CAST ('2002-02-20 10:15:12+12:30' AS TIMESTAMP(0));
- ターゲットのFORMAT句にタイムゾーンの書式設定文字が含まれており、ターゲットの文字列にタイムゾーンが含まれていない場合、出力にはセッションのタイムゾーンが入ります。これは、ターゲットのデータ型がタイムゾーンを指定しているかどうかに関係なく実行されます。
SELECT CAST ('2002-02-20 10:15:12' AS TIMESTAMP(0) WITH TIME ZONE FORMAT 'Y4-MM-DDBHH:MI:SSBZ');
- ソースの文字列とターゲットのデータ型の両方がタイムゾーンを指定していない場合、ソースの文字列は現在のセッションのタイムゾーンに基づいて、内部的にUTCに変換されます。