16.20 - PERIODリテラル - Teradata Vantage NewSQL Engine

Teradata Vantage™ データ タイプおよびリテラル

prodname
Teradata Database
Teradata Vantage NewSQL Engine
vrm_release
16.20
category
プログラミング リファレンス
featnum
B035-1143-162K-JPN

目的

PERIODデータ型の定数値を指定します。

テンポラル テーブルと非テンポラル テーブルのどちらも、PERIODデータ型とPERIODリテラルをサポートしています。ただし、Periodデータ型およびリテラルはANSI標準SQLではないため、これらを使用してTeradataテンポラル テーブルを定義することはできますが、ANSIテンポラル テーブルを定義することはできません。Teradataテンポラル テーブルについての詳細は、<Teradata Vantage™ テンポラル テーブル サポート、B035-1182>を参照してください。ANSIテンポラル テーブルの詳細については、<Teradata Vantage™ ANSIテンポラル テーブル サポート、B035-1186>を参照してください。

構文



beginning_bound, ending_bound
日付、時刻、またはタイムスタンプ リテラルと同じ形式の日付、時刻、またはタイムスタンプ値。
beginning_boundending_boundの間のカンマ(,)区切りは、どちらの側にも任意でスペースを入れることができます。ハイフン(-)区切りは、前後にスペースを入れる必要があります。
日付の値は次の形式にする必要があります。
YYYY-MM-DD
時刻の値は次の形式にする必要があります。
  • hh:mi:ss
  • hh:mi:sssignhh:mi
  • hh:mi:ss.ssssss
  • hh:mi:ss.sssssssignhh:mi
タイムスタンプの値は次の形式にする必要があります。
  • YYYY-MM-DD hh:mi:ss
  • YYYY-MM-DD hh:mi:sssignhh:mi
  • YYYY-MM-DD hh:mi:ss.ssssss
  • YYYY-MM-DD hh:mi:ss.sssssssignhh:mi
詳細は、日付リテラル時刻リテラルおよびタイムスタンプ リテラルを参照してください。
UNTIL_CHANGED
終了境界は、永久または変更されるまで値を保持します。UNTIL_CHANGEDは、beginning_boundが日付またはタイムスタンプの値の場合のみ指定されます。
beginning_boundが日付の値の場合、UNTIL_CHANGEDはDATE '9999-12-31'を指定します。beginning_boundがタイムスタンプの値の場合、UNTIL_CHANGEDは、beginning_boundの精度まで精度を切り詰めたTIMESTAMP'9999-12-31 23:59:59.999999+00:00'を指定します。beginning_boundにタイムゾーンがない場合、タイムゾーンは省略されます。
UNTIL_CLOSED
テンポラル テーブルに含まれるトランザクション期間列の期間値の終了境界であり、この行が開いている行であることを表わします。UNTIL_CLOSEDの値は、TIMESTAMP '9999-12-31 23:59:59:999999+00:00'です。
Teradataテンポラル テーブルについての詳細は、<Teradata Vantage™ テンポラル テーブル サポート、B035-1182>を参照してください。

データ型

Periodリテラルの形式 データ型
hh:mi:ss PERIOD(TIME(0))。
hh:mi:sssignhh:mi PERIOD(TIME(0) WITH TIME ZONE)。
hh:mi:ss.ssssss PERIOD(TIME(n))。このnは、開始境界値と終了境界値内にある秒の小数桁の最大数です。終了境界値がUNTIL_CHANGEDの場合は、開始境界値にある秒の小数桁の最大数になります。
hh:mi:ss.sssssssignhh:mi PERIOD(TIME(n) WITH TIME ZONE)。このnは、開始境界値と終了境界値内にある秒の小数桁の最大数です。終了境界値がUNTIL_CHANGEDの場合は、開始境界値にある秒の小数桁の最大数になります。
YYYY-MM-DD PERIOD(DATE)。
YYYY-MM-DD hh:mi:ss PERIOD(TIMESTAMP(0))。
YYYY-MM-DD hh:mi:sssignhh:mi PERIOD(TIMESTAMP(0) WITH TIME ZONE)。
YYYY-MM-DD hh:mi:ss.ssssss PERIOD(TIMESTAMP(n))。このnは、開始境界値と終了境界値内にある秒の小数桁の最大数です。終了境界値がUNTIL_CHANGEDの場合は、開始境界値にある秒の小数桁の最大数になります。
YYYY-MM-DD hh:mi:ss.sssssssignhh:mi PERIOD(TIMESTAMP(n) WITH TIME ZONE)。このnは、開始境界値と終了境界値内にある秒の小数桁の最大数です。終了境界値がUNTIL_CHANGEDの場合は、開始境界値にある秒の小数桁の最大数になります。

構成要素のタイプ

PERIODリテラルの構成要素のタイプは、文字列リテラルで指定された日付/時刻値の形式から派生します。

状況 リテラルの構成要素
開始境界値にだけ日付値がある DATE
開始境界値にだけ日付値があり、タイムゾーン間隔を開始境界値と終了境界値のどちらの後にも指定しない TIME(n)
開始境界値にだけ日付値があり、タイムゾーン間隔を開始境界値か終了境界値の後に指定する TIME(n) WITH TIME ZONE
開始境界値に日付値と時刻値があり、タイムゾーン間隔を開始境界値と終了境界値のどちらの後にも指定しない TIMESTAMP(n)
開始境界値に日付値と時刻値があり、タイムゾーン間隔を開始境界値か終了境界値の後に指定する TIMESTAMP(n) WITH TIME ZONE

使用上の注意

Periodリテラルは、先頭がキーワードPERIODで、その後に期間の始め(開始境界値)と終わり(終了境界値)を示す文字列リテラルが続きます。構文構成要素のいくつかと、わかりにくい使用法について、以下で説明します。

状況 結果
年、月、日、時間、分、秒、およびタイムゾーン間隔は、使用可能な桁数および有効な範囲に対する日付/時刻リテラルのルールに従わない 構文エラーが報告されます。
終了境界値がUNTIL_CHANGEDではない 次のようになります。
  • 開始および終了境界値の両方の値に日付値を付けるか、どちらの境界値にも日付値を付けないようにします。
  • 開始および終了境界値の両方の値に時刻値を付けるか、どちらの境界値にも時刻値を付けないようにします。そうしないと、構文エラーが報告されます。
終了境界値がUNTIL_CHANGEDではなく、開始境界がタイムスタンプ値である 終了境界値の後にタイムゾーン間隔を付けてはいけません。そうしないと、構文エラーが報告されます。
終了境界値がUNTIL_CLOSED (Teradataテンポラル テーブルのみ) 次のようになります。
  • 開始境界値のデータ型は、TIMESTAMP(6) WITH TIME ZONEと互換にする必要があります。
  • このリテラルは、結果の割り当て先の列がトランザクション期間列になる、割り当て操作でのみ有効です。
  • トランザクション期間列の値を設定する方法が、非テンポラルのDMLを使用する以外にないため、このリテラルは非テンポラルのDMLでのみ有効になります。

    テンポラル テーブルに対して非テンポラルの操作を実行するには、NONTEMPORAL権限が必要になります。詳細は、<Teradata Vantage™ テンポラル テーブル サポート、B035-1182>を参照してください。

開始境界値に時刻値があり、終了境界値がUNTIL_CHANGEDでない リテラルの精度nは、開始境界値と終了境界値で指定された小数桁の最大数です。
開始境界値に時刻値があり、終了境界値がUNTIL_CHANGEDである リテラルの精度nは、開始境界値に指定されている小数桁数です。
これらのうち1つのみがタイムゾーン値を含む 他のタイムゾーン フィールドは、現在のセッションのタイムゾーンの変位に設定されます。両方にタイムゾーンの値がある場合、結果の境界には対応するタイムゾーンの値が含まれます。
終了境界値にUNTIL_CHANGEDが指定され、リテラルの構成要素のタイプがTIME(n) [WITH TIME ZONE] 構文エラーが報告されます。
リテラルの構成要素のタイプがTIMESTAMP(n) WITH TIME ZONE 結果の終了要素は、UTCでのTIMESTAMP[(n)] WITH TIME ZONEの最大値(つまり、終了境界に対するタイムゾーンの変位はINTERVAL '00:00' HOUR TO MINUTE)に設定されます。
終了境界値がUNTIL_CHANGEDの場合には、結果の終了構成要素が最大のTIMESTAMP値に設定されます。
リテラルの構成要素のタイプがTIMEまたはTIMESTAMPで、開始境界値または終了境界値にうるう秒が含まれる 秒の部分は結果の精度にまでに切り捨てられた精度で、59.999999に調整されます。
リテラルの構成要素のタイプがDATE 結果の終了境界は、結果の開始境界より大きくなければなりません。そうでないと、構文エラーが報告されます。
指定されたタイムゾーン間隔(指定されていない場合は現在のセッションのタイムゾーンの変位)を使用して、開始境界値と終了境界値をUTCに調整した後、リテラルの構成要素のタイプがDATEでない 結果の終了境界は、結果の開始境界より大きくなければなりません。そうでないと、構文エラーが報告されます。
PERIODリテラルの開始構成要素がUNTIL_CHANGEDまたはUNTIL_CLOSEDとして指定されている エラーが報告されます。

制限

UDFやJavaで記述された外部ストアド プロシージャは引数をサポートしていないか、PERIODデータ型のある値を返しません。

プライマリ インデックス列またはパーティション列を、PERIODデータ型を含む列にすることはできません。

例: PERIOD(DATE)リテラル

次に示すINSERT文では、PERIOD(DATE)リテラルを使用します。

INSERT INTO Policy
   (Policy_ID, Customer_ID, Policy_Type, Policy_Details, Validity)
   VALUES (497201, 304779902, 'AU', 'STD-CH-524-WXY-00',
           PERIOD '(2005-02-03, 2006-02-04)');

次に示すINSERT文ではPERIOD(DATE)リテラルを使用し、終了境界値をUNTIL_CHANGEDに設定します。

INSERT INTO Policy
   (Policy_ID, Customer_ID, Policy_Type, Policy_Details, Validity)
   VALUES (541008, 246824626, 'AU', 'STD-CH-345-NXY-00',
           PERIOD '(2009-10-01, UNTIL_CHANGED)');

例: PERIOD(TIME[(n)] WITH TIME ZONE)リテラル

次のUPDATE文では、カリフォルニア州Los Angelesからフロリダ州Orlando行きのフライト243のPERIOD(TIME(0) WITH TIME ZONE)列がスケジュール テーブルの中で更新されます。リテラルの構成要素のタイプはTIME(0) WITH TIME ZONE。

UPDATE schedule
   SET flight_period = PERIOD '(08:00:00-08:00 - 15:40:00-05:00)'
   WHERE flight_no = 243;