目的
PERIODデータ型の定数値を指定します。
テンポラル テーブルと非テンポラル テーブルのどちらも、PERIODデータ型とPERIODリテラルをサポートしています。ただし、Periodデータ型およびリテラルはANSI標準SQLではないため、これらを使用してTeradataテンポラル テーブルを定義することはできますが、ANSIテンポラル テーブルを定義することはできません。Teradataテンポラル テーブルについての詳細は、<Teradata Vantage™ テンポラル テーブル サポート、B035-1182>を参照してください。ANSIテンポラル テーブルの詳細については、<Teradata Vantage™ ANSIテンポラル テーブル サポート、B035-1186>を参照してください。
構文
- beginning_bound, ending_bound
- 日付、時刻、またはタイムスタンプ リテラルと同じ形式の日付、時刻、またはタイムスタンプ値。
- UNTIL_CHANGED
- 終了境界は、永久または変更されるまで値を保持します。UNTIL_CHANGEDは、beginning_boundが日付またはタイムスタンプの値の場合のみ指定されます。
- UNTIL_CLOSED
- テンポラル テーブルに含まれるトランザクション期間列の期間値の終了境界であり、この行が開いている行であることを表わします。UNTIL_CLOSEDの値は、TIMESTAMP '9999-12-31 23:59:59:999999+00:00'です。
データ型
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テンポラル テーブルのみ) | 次のようになります。
|
開始境界値に時刻値があり、終了境界値が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;