TIME WITH TIME ZONE - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Published
2021年7月
Language
日本語
Last Update
2021-09-23
dita:mapPath
ja-JP/rin1593638965306.ditamap
dita:ditavalPath
ja-JP/wrg1590696035526.ditaval
dita:id
B035-1147
Product Category
Software
Teradata Vantage

Cデータ型定義

typedef struct ANSI_Time_WZone
{
    DECIMAL4 seconds;
    BYTEINT  hour;
    BYTEINT  minute;
    BYTEINT  zone_hour;
    BYTEINT  zone_minutes;
} ANSI_Time_WZone;

使用方法

2番目のメンバーはDECIMAL(8,6)型の数値フィールドとして配置され、秒の整数部2桁と小数点以下6桁までを表記できます。

SQL TIME WITH TIME ZONE型に定義されている値の範囲は、関数の入力引数と戻り引数に適用されます。値の有効範囲外の値はエラーを生成します。

UDFに渡すTIME WITH TIME ZONE値のすべては、協定世界時(UTC)になります。また、UDFから返すTIME WITH TIME ZONE値は、UTCにする必要があります。

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

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

TIMEZONE_INTERNAL_TO_EXTERNAL(i, s, h, m)
TIMEZONE_EXTERNAL_TO_INTERNAL(s, h, m, i)
i
ANSI_Time_WzoneまたはANSI_TimeStamp_Wzoneのいずれかのポインタ。
s
iの符号を格納するBYTEINT値: hmが負の場合は0、正の場合は1。
h
iの時間オフセットを格納するBYTEINT値。
外部形式の時間オフセットは、変換前と変換後のどちらも[0, 14]の範囲内のBYTEINT値になります。この値は、UTCと特定のタイムゾーン間の時間オフセットを表わします。
m
iの分オフセットを格納するBYTEINT値。
外部形式の分オフセットは、変換前と変換後のどちらも[0, 59]の範囲のBYTEINT値になります。この値は、UTCと特定のタイムゾーン間の分オフセットを表わします。

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

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

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

UDF定義とC関数宣言の中のTIME WITH TIME ZONEの例を以下に示します。

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