次のSELECT文では、CASTの結果は、日付'2008-05-14'と、指定したセッションのタイムゾーン変位INTERVAL -'08:00' HOUR TO MINUTEによってUTCに調整されデフォルトの時間'00:00:00'から生成されるタイムスタンプになります。したがって、CASTの値は、'2008-05-14 08:00:00' (UTC)になります。
UTCでのCASTの結果値は現在のセッションのタイムゾーン変位INTERVAL '05:00:00' HOUR TO MINUTEに調整されるため、SELECT文の結果は次のようになります。TIMESTAMP '2008-05-14 13:00:00'
SET TIME ZONE INTERVAL '05:00' HOUR TO MINUTE; SELECT CAST(DATE '2008-05-14' AS TIMESTAMP(0) AT -8);
次のSELECT文を考慮します。
SELECT CAST(DATE '2008-05-14' AS TIMESTAMP(0) WITH TIME ZONE AT -8);
この場合、CASTの結果はタイムスタンプになります。このタイムスタンプはソースの式値'2008-05-14'から生成され、デフォルトの時間'00:00:00'は指定されたセッションのタイムゾーン変位(INTERVAL -'08:00' HOUR TO MINUTE)によってUTCに調整されます。したがって、CASTの値は指定されたセッションのタイムゾーン変位INTERVAL -'08:00' HOUR TO MINUTEにより、UTCで'2008-05-14 08:00:00'になります。
UTCでのCASTの結果値はそのタイムゾーン変位INTERVAL -'08:00' HOUR TO MINUTEに調整されるため、SELECT文の結果は、TIMESTAMP '2008-05-14 00:00:00-08:00'になります。現在のセッションのタイムゾーンは影響しません。