拡張中の期間値の開始境界は、行を拡張する前に、time_literalで指定した時間に開始するよう調整されます。アンカー ポイント、たとえば、MONTH_BEGINは、セッション タイムゾーンに基づいて計算されます。結果として、2つの異なるタイムゾーンにある2つのセッションでは、出力が異なる場合があります。
次の例では、入力行のEXPAND ON句ではタイムゾーンを指定していないため(継続期間の値がPERIOD(TIMESTAMP)データ型を持っているため)、TIME定数はセッション タイム ゾーンでは00:00:00がデフォルトです。TIME定数がUTCに変換された後、前日になります。そこで、前日と月の始まりをその行で確認し、それが返ってくると、Teradata Databaseはセッション時間を追加します。
まず、以下のテーブルを作成します。
CREATE SET TABLE test ( testid INTEGER, duration PERIOD(TIMESTAMP)) PRIMARY INDEX (testid);
testテーブルには次の行が含まれます。
testid | 継続期間(UTC) |
ABC | 2002-01-31 15:30:00, 2002-05-31 15:00:00 |
次に、デフォルトのタイムゾーン リテラルを持つMONTH_BEGINによる以下のアンカー ポイント拡張を実行します。
SET TIME ZONE INTERVAL '09:00' HOUR TO MINUTE; SELECT BEGIN(xyz) FROM test EXPAND ON duration AS xyz BY ANCHOR MONTH_BEGIN;
この文は、次の行を返します。
BEGIN(xyz) |
2002-03-01 00:00:00 |
2002-04-01 00:00:00 |
2002-05-01 00:00:00 |
次の例では、入力行ではタイムゾーンを指定していないため(継続期間の値がPERIOD(TIMESTAMP)データ型を持っているため)、TIME定数はセッション タイム ゾーンでは20:00:00になります。TIME定数がUTCに変換された後、翌日になります。そのため、Teradata Databaseは、翌日から月の終わりまでをその行で確認し、それが返ってくると、セッション時間を追加します。
次のテーブルがあります。
CREATE SET TABLE test1 ( testid INTEGER, duration PERIOD(TIMESTAMP)) PRIMARY INDEX (testid);
test1テーブルには次の行が含まれます。
testid | 継続期間(UTC) |
ABC | 2005-12-03 04:30:00, 2006-04-01 |
TIME定数とデフォルトのセッション タイムゾーンを持つMONTH_ENDによる以下のアンカー ピリオド拡張を実行します。
SET TIME ZONE INTERVAL -'07:00' HOUR TO MINUTE; SELECT BEGIN(xyz) FROM test1 EXPAND ON duration AS xyz BY ANCHOR MONTH_END AT TIME ‘20:00:00’;
BEGIN(XYZ) |
2005-12-31 20:00:00 |
2006-01-31 20:00:00 |
2006-02-28 20:00:00 |
次の例では、TIME定数値はタイムゾーン+10:00では07:00:00です。TIME定数がUTCに変換された後、時間は前日の21:00です。そのため、Teradata Databaseは前日と月の終わりの値をその行で確認し、時系列値が文から返ってくると、Teradata Databaseはセッション時間、00:00を追加します。
次のテーブルがあります。
CREATE SET TABLE test2 ( testid INTEGER, duration PERIOD(TIMESTAMP)) PRIMARY INDEX (testid);
test2テーブルには次の行が含まれます。
testid | 継続期間(UTC) |
timeseries | 2005-12-30 22:30:00, 2006-04-29 18:00:00 |
TIMEリテラルとタイムゾーンの両方を指定して、MONTH_ENDによる以下のアンカー ピリオド拡張を実行します。
SET TIME ZONE INTERVAL '00:00' HOUR TO MINUTE; SELECT timeseries FROM test2 EXPAND ON duration AS timeseries BY ANCHOR PERIOD MONTH_END AT TIME '07:00:00+10:00';
この文は、次の行セットを返します。
timeseries |
2005-12-30 21:00:00, 2006-01-30 21:00:00 |
2006-01-30 21:00:00, 2006-02-27 21:00:00 |
2006-02-27 21:00:00, 2006-03-30 21:00:00 |
2006-03-30 21:00:00, 2006-04-29 21:00:00 |