17.05 - 例: 異なるタイムゾーンの2つの異なるセッションにおける同一の拡張 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ操作言語

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
Release Date
2021年1月
Content Type
プログラミング リファレンス
Publication ID
B035-1146-175K-JPN
Language
日本語 (日本)

拡張中の期間値の開始境界は、行を拡張する前に、time_literalで指定した時間に開始するよう調整されます。アンカー ポイント、たとえば、MONTH_BEGINは、セッション タイムゾーンに基づいて計算されます。結果として、2つの異なるタイムゾーンにある2つのセッションでは、出力が異なる場合があります。

次の例では、入力行のEXPAND ON句ではタイムゾーンを指定していないため(継続期間の値がPERIOD(TIMESTAMP)データ型を持っているため)、TIME定数はセッション タイム ゾーンでは00:00:00がデフォルトです。TIME定数がUTCに変換された後、前日になります。そこで、前日と月の始まりをその行で確認し、それが返ってくると、データベースはセッション時間を追加します。

まず、以下のテーブルを作成します。

     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に変換された後、翌日になります。そのため、データベースは、翌日から月の終わりまでをその行で確認し、それが返ってくると、セッション時間を追加します。

次のテーブルがあります。

     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です。そのため、データベースは前日と月の終わりの値をその行で確認し、時系列値が文から返ってくると、データベースはセッション時間、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