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