17.00 - 17.05 - PERIOD (DATE) / PERIOD(TIME) / PERIOD(TIMESTAMP) - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQL外部ルーチン プログラミング

Product
Advanced SQL Engine
Teradata Database
Release Number
17.00
17.05
Published
2020年6月
Content Type
プログラミング リファレンス
Publication ID
B035-1147-170K-JPN
Language
日本語 (日本)

Cデータ型定義

typedef int PDT_HANDLE;

使用

PDT_HANDLEデータ型は、PERIOD(DATE)、PERIOD(TIME(n))、PERIOD(TIME(n) WITH TIME ZONE)、PERIOD(TIMESTAMP(n))、またはPERIOD(TIMESTAMP(n) WITH TIME ZONE))引数または戻り型を渡したり戻したりするときに使用します。

SQL PERIOD(TIME(n))、PERIOD(TIME(n) WITH TIME ZONE)、PERIOD(TIMESTAMP(n))、またはPERIOD(TIMESTAMP(n) WITH TIME ZONE))型に定義されている秒の小数点以下桁数は、入力引数に適用され、関数の引数を戻します。値の有効範囲外の値はエラーを生成します。

UDFに渡すPERIOD(TIME(n))とPERIOD(TIMESTAMP(n))の値は、すべて協定世界時(UTC)にします。また、UDFから返すPERIOD(TIME(n))とPERIOD(TIMESTAMP(n))の値は、すべてUTCにする必要があります。

PERIOD(TIME(n) WITH TIME ZONE)とPERIOD(TIMESTAMP(n) WITH TIME ZONE)のタイプには、タイムゾーン フィールドのzone_hourとzone_minuteが含まれています。これらのフィールドには、内部形式と外部形式があります。これらのタイプの入力引数をUDFに渡すときには、その値を内部形式にする必要があります。同様に、これらのタイプの戻り引数も、内部形式にする必要があります。

PERIOD(TIME(n) WITH TIME ZONE)と、PERIOD(TIMESTAMP(n) WITH TIME ZONE)のタイプのタイムゾーン フィールドを変更するには、sqltypes_td.hファイルにある次に示すマクロを使用して、ANSI_Time_WzoneとANSI_TimeStamp_Wzoneのタイムゾーン フィールドの表現形式を内部と外部の間で変換します。
  • TIMEZONE_INTERNAL_TO_EXTERNAL(i,s,h,m)

    条件:

    入力パラメータ 説明
    i ANSI_Time_Wzoneへのポインタ。またはANSI_TimeStamp_Wzoneへのポインタ。
    s iの符号を格納するBYTEINT値。
    h iの時間オフセットを格納するBYTEINT値。
    m iの分オフセットを格納するBYTEINT値。
  • TIMEZONE_EXTERNAL_TO_INTERNAL(s,h,m,i)

    条件:

    入力パラメータ 説明
    s iの符号を設定するBYTEINT値。
    h iの時間オフセットを設定するBYTEINT値。
    m iの分オフセットを設定するBYTEINT値。
    i ANSI_Time_Wzoneへのポインタ。またはANSI_TimeStamp_Wzoneへのポインタ。
タイムゾーン フィールドの外部形式は、符号と、時間オフセット、分オフセットの3つの値で構成されます。それぞれの内容は、次のとおりです。
  • 符号は、オフセットが負の場合は0、オフセットが正の場合は1のBYTEINT値になります。
  • 外部形式の時間オフセットは、変換前と変換後のどちらも0から14のBYTEINT値になります。この値は、UTCと特定のタイムゾーン間の時間オフセットを表現します。
  • 外部形式の分オフセットは、変換前と変換後のどちらも0から59のBYTEINT値になります。この値は、UTCと特定のタイムゾーン間の分オフセットを表現します。

負のオフセットの最大値は-12:59になります。正のオフセットの最大値は+14:00になります。

この表現では、2通りのUTC表現(+00:00と-00:00)をもたらすことになります。これは、どちらも表示目的で使用している内部表現をそのまま反映しています。

PERIOD型の詳細については、<Teradata Vantage™ - データ タイプおよびリテラル、B035-1143>を参照してください。

UDF定義の中でPERIOD(DATE)を使用する例、およびC関数宣言の中でPDT_HANDLEを使用する例を以下に示します。

SQL関数定義 対応するC関数宣言
CREATE FUNCTION F1 (
  A PERIOD(DATE) )
RETURNS PERIOD(DATE)
 ...;
void f1( PDT_HANDLE *a,
         PDT_HANDLE *result,
   ... )
{  ... }