次の文を考えてみましょう。
SET TIME ZONE +1; SELECT CAST((TIMESTAMP '2008-06-01 08:30:00' AT TIME ZONE -8) AS DATE AT SOURCE TIME ZONE);
このSELECT文は、タイムゾーン変位INTERVAL -'08:00' HOUR TO MINUTEの日付を返します。つまり、この文は'08/05/31'を返します。このSELECT文にAT句が指定されていない、またはAT LOCAL句が指定されている場合は、現在のセッションのタイムゾーン変位INTERVAL HOUR '01:00' MINUTEの'08/06/01'が返されることになります。
次に、AT句が指定されていなかった場合の、SELECT文の結果を示します。
SET TIME ZONE INTERVAL '01:00' HOUR TO MINUTE; SELECT TIMESTAMP '2008-06-01 08:30:00' AT TIME ZONE INTERVAL -'08:00' HOUR TO MINUTE; 2008-06-01 08:30:00 AT TIME ZONE INTERVAL -8:00 HOUR TO MINUTE -------------------------------------------------------------- 2008-05-31 23:30:00-08:00 SELECT CAST((TIMESTAMP '2008-06-01 08:30:00' AT TIME ZONE INTERVAL -'08:00' HOUR TO MINUTE) AS DATE); 2008-06-01 08:30:00 AT TIME ZONE INTERVAL -8:00 HOUR TO MINUTE -------------------------------------------------------------- 08/06/01
次に、現在のセッションのタイムゾーン変位がINTERVAL -'08:00' HOUR TO MINUTEで、AT句が指定されていないSELECT文の結果を示します。
SET TIME ZONE INTERVAL -'08:00' HOUR TO MINUTE; SELECT CAST((CAST(TIMESTAMP '2008-06-01 08:30:00+01:00' AS TIMESTAMP(0)) AT TIME ZONE INTERVAL -'08:00' HOUR TO MINUTE) AS DATE); 2008-06-01 08:30:00+01:00 AT TIME ZONE INTERVAL -8:00 HOUR TO MINUTE -------------------------------------------------------------------- 08/05/31