6.2.1 データ型の種類
データ型の種類を次の表に示します。
|
項番 |
分類 |
データ型 |
データ型コード※1 |
データ格納長 (単位:バイト) |
データ形式 |
||
|---|---|---|---|---|---|---|---|
|
10進 |
16進 |
||||||
|
1 |
数データ |
整数データ |
BIGINT |
241 |
F1 |
8 |
整数(8バイト) |
|
2 |
INTEGER※3 |
245 |
F5 |
4 |
整数(4バイト) |
||
|
3 |
SMALLINT※3 |
247 |
F7 |
2 |
整数(2バイト) |
||
|
4 |
固定小数点数データ |
DECIMAL(m,n) |
229 |
E5 |
|
固定小数点数 |
|
|
5 |
NUMERIC(m,n) |
||||||
|
6 |
浮動小数点数データ |
DOUBLE PRECISION |
225 |
E1 |
8 |
倍精度浮動小数点数(8バイト) |
|
|
7 |
FLOAT |
||||||
|
8 |
REAL |
227 |
E3 |
4 |
単精度浮動小数点数(4バイト) |
||
|
9 |
文字データ |
CHARACTER(n) |
197 |
C5 |
n |
固定長文字列 |
|
|
10 |
VARCHAR(n) |
193 |
C1 |
n+2 |
可変長文字列 |
||
|
11 |
STRING |
||||||
|
12 |
日時データ |
日付データ |
DATE |
113 |
71 |
4 |
年,月,日の情報を持つ日付のデータ型 |
|
13 |
時刻データ |
TIME(p) |
121 |
79 |
3+↑p÷2↑ |
時,分,秒の情報を持つ時刻のデータ型 |
|
|
14 |
時刻印データ(TIMESTAMP) |
TIMESTAMP(p) WITHOUT TIME ZONE |
125 |
7D |
7+↑p÷2↑ |
|
|
|
15 |
TIMESTAMP(p) WITH TIME ZONE |
127 |
7F |
||||
|
16 |
バイナリデータ |
BINARY(n) |
149 |
95 |
n |
固定長バイナリデータ |
|
|
17 |
VARBINARY(n) |
145 |
91 |
n+2 |
可変長バイナリデータ |
||
|
18 |
論理データ |
BOOLEAN |
33 |
21 |
1 |
真,偽,または不定のどれかを取る論理値を表すデータ型 |
|
|
19 |
UUIDデータ |
UUID |
155 |
9B |
16 |
UUIDを表す16バイトの固定長バイナリデータ |
|
|
20 |
配列データ |
ARRAY |
なし |
なし |
要素データ型に従う |
順序付けられた一連のデータを要素とする一次元の配列データ |
|
|
21 |
構造データ |
STRUCT |
139 |
8B |
フィールドデータ型に従う |
複数のデータ型のデータから構成されるデータ型 |
|
|
22 |
行データ |
ROW |
69 |
45 |
行長※2 |
行インタフェースで使用するデータ型 |
|
- 注※1
-
検索結果列のデータ型を表すコードです。
データ型コードは,CLI関数使用時にa_rdb_SQLDataType_t構造体に格納されます。
- 注※2
-
各列のデータ格納長の合計が行長になります。
- 注※3
-
整数データ型のデータ形式がレガシー形式の場合,データ型コード,データ格納長,データ形式は次の表に示すとおりになります。
データ型
データ型コード
データ格納長
データ形式
10進
16進
INTEGER
241
F1
8
整数(8バイト)
SMALLINT
245
F5
4
整数(4バイト)
(1) 数データ
数データについて説明します。
(a) 整数データ
HADBでサポートしている整数データ(BIGINT,INTEGER,SMALLINT)を次の表に示します。
|
整数データ |
説明 |
|---|---|
|
BIGINT※1 |
|
|
INTEGER |
|
|
SMALLINT |
|
- 注※1
-
整数データ型のデータ形式がレガシー形式の場合,データ型にBIGINT型が指定されると,HADBはデータ型にINTEGER型が指定されたと見なします。
- 注※2
-
整数データ型のデータ形式がレガシー形式の場合,INTEGER型は8バイトの符号付き整数になります。データ形式は8バイトの2進形式で,-9,223,372,036,854,775,808〜9,223,372,036,854,775,807の整数を扱うことができます。
レガシー形式の場合,INTEGER型とBIGINT型は同じデータ形式(8バイトの符号付き整数)になります。そのため,INTEGER型またはBIGINT型のどちらを使用してもデータベースの容量は同じになります。
- 注※3
-
整数データ型のデータ形式がレガシー形式の場合,SMALLINT型は4バイトの符号付き整数になります。データ形式は4バイトの2進形式で,-2,147,483,648〜2,147,483,647の整数を扱うことができます。
- 整数データ型のデータ形式
-
HADBでは,整数データ型のデータ形式が次の表に示すようにデフォルト形式とレガシー形式の2つがあり,どちらかを選択できます。
表6‒7 整数データ型のデータ形式 整数データ
整数データ型のデータ形式
デフォルト形式
レガシー形式
BIGINT
8バイトの符号付き整数
INTEGER
4バイトの符号付き整数
8バイトの符号付き整数
SMALLINT
2バイトの符号付き整数
4バイトの符号付き整数
上記の表に示すとおりデフォルト形式とレガシー形式では,INTEGER型とSMALLINT型のデータ形式が異なります。通常はデフォルト形式が適用されます。レガシー形式を適用したい場合は,データベースの初期設定時に実行するadbinitコマンドで,adb_init_integer_formatオペランドにLEGACYを指定してください。
- 重要
-
整数データ型のデータ形式はadbinitコマンドの実行時のときにだけ選択できます。それ以降,整数データ型のデータ形式を変更することはできません。変更する場合はデータベースを再度初期設定する必要があります。
- メモ
-
-
HADBサーバのバージョンアップ後も,整数データ型のデータ形式は引き継がれます。
-
レガシー形式は,HADB 06-00より前のデータ形式と同じです。HADBサーバを06-00より前のバージョンからバージョンアップした場合,整数データ型のデータ形式はレガシー形式のまま引き継がれます。
-
デフォルト形式とレガシー形式で仕様差がある場合,レガシー形式の仕様を「整数データ型のデータ形式がレガシー形式の場合」と表記して説明します。
-
(b) 固定小数点数データ
HADBでサポートしている固定小数点数データ(DECIMAL,NUMERIC)について説明します。
- ■DECIMAL,NUMERIC
-
-
固定小数点数を扱うデータ型です。
-
データ型を指定する際の記述形式を次に示します。
-
DECIMAL型の場合
DEC〔(m〔,n〕)〕またはDECIMAL〔(m〔,n〕)〕
-
NUMERIC型の場合
NUMERIC〔(m〔,n〕)〕
- 重要
-
データ型にNUMERIC型が指定された場合,HADBはデータ型にDECIMAL型が指定されたと見なします。
-
-
精度(全体の桁数)をm,位取り(小数部の桁数)をnで指定します。
-
m,nは正整数で,1≦m≦38,0≦n≦38,n≦mです。
-
mを省略すると38が仮定され,nを省略すると0が仮定されます。
-
データは2進形式で,位取りに合わせた値が格納されます。
-
負の値は2の補数で表します。
-
データは,次の図に示すように精度によって2〜16バイトの整数データとして格納されます。
図6‒5 DECIMAL型のデータ形式 -
定数は,123.4,12.345という形式で記述します。定数については,「6.3 定数」を参照してください。
-
(c) 浮動小数点数データ
HADBでサポートしている浮動小数点数データ(DOUBLE PRECISION,FLOAT,REAL)について説明します。
- ■DOUBLE PRECISION,FLOAT
-
-
値の範囲は,約-1.7×10308〜-2.3×10-308,0,および約2.3×10-308〜1.7×10308の倍精度浮動小数点数を扱うデータ型です。
なお,値の範囲は,ハードウェア表現に依存します。
-
データ型を指定する際の記述形式を次に示します。
-
DOUBLE PRECISION型の場合
DOUBLEまたはDOUBLE PRECISION
-
FLOAT型の場合
FLOAT
- 重要
-
データ型にFLOAT型が指定された場合,HADBはデータ型にDOUBLE PRECISION型が指定されたと見なします。
-
-
データは,8バイトの浮動小数点数データです。
-
定数は,1.0e2,-3.4E-1のように,仮数を整数定数または10進定数で表し,指数を3桁以下の整数で記述します。定数については,「6.3 定数」を参照してください。
-
NaN(非数),および無限大となる値を扱うことはできません。
-
-0は+0に変換されます。
-
非正規化数は+0に変換されます。
-
浮動小数点データの丸めが発生する場合は,最近接偶数への丸めが適用されます。
-
- ■REAL
-
-
値の範囲は,約-3.4×1038~-1.2×10-38,0,および約1.2×10-38~3.4×1038の単精度浮動小数点数を扱うデータ型です。
なお,値の範囲は,ハードウェア表現に依存します。
-
データ型を指定する際の記述形式を次に示します。
REAL
-
データは,4バイトの浮動小数点数データです。
-
定数は,1.0e2,-3.4E-1のように,仮数を整数定数または10進定数で表し,指数を2桁以下の整数で記述します。定数については,「6.3 定数」を参照してください。
-
NaN(非数),および無限大となる値を扱うことはできません。
-
-0は+0に変換されます。
-
非正規化数は+0に変換されます。
-
浮動小数点データの丸めが発生する場合は,最近接偶数への丸めが適用されます。
-
REAL型を使用すると,DOUBLE PRECISION型またはFLOAT型を使用するよりも,データベースの容量を少なくできます。
-
(2) 文字データ
- ■CHARACTER
-
-
固定長文字列を扱うデータ型です。
-
データ型を指定する際の記述形式を次に示します。
CHAR,CHAR(n),CHARACTER,またはCHARACTER(n)
-
文字列の長さ(バイト数)をnで指定します。nは1〜32,000の整数で,nを省略すると1が仮定されます。
-
定数は,'char','Char','charChar'という形式で記述します。定数については,「6.3 定数」を参照してください。
-
半角文字,全角文字の両方を扱うことができます。
-
文字データの比較を行う場合,文字コードの大小が比較するデータの大小となります。
-
- ■VARCHAR,STRING
-
-
可変長文字列を扱うデータ型です。
-
データ型を指定する際の記述形式を次に示します。
-
VARCHAR型の場合
VARCHAR(n)
-
STRING型の場合
STRING
- 重要
-
-
STRING型の列は外部表にだけ定義できます。実表にはSTRING型の列を定義できません。
-
データ型にSTRING型が指定された場合,HADBはデータ型にVARCHAR(32000000)が指定されたと見なします。
-
-
-
文字列の最大長(バイト数)をnで指定します。nは1〜64,000の整数でなければなりません。nは省略できません。
-
VARCHAR型のデータ形式を次の図に示します。
図6‒6 VARCHAR型のデータ形式 文字データの長さ(L)を4バイトで表します。
-
半角文字,全角文字の両方を扱うことができます。また,文字列の長さが0バイトのデータを扱うこともできます。
-
文字データの比較を行う場合,文字コードの大小が比較するデータの大小となります。
-
次に示す個所に,データ長が32,000バイトを超えるVARCHAR型は指定できません。
-
ALTER TABLE文の列定義に指定するデータ型
-
CREATE FOREIGN TABLE文の列定義に指定するデータ型
-
CREATE TABLE文の列定義に指定するデータ型
-
表関数列リストに指定するデータ型
-
スカラ関数CASTに指定する変換後のデータ型
-
スカラ関数CONVERTに指定する変換後のデータ型
-
-
次に示す個所にSTRING型は指定できません。
-
ALTER TABLE文の列定義に指定するデータ型
-
CREATE TABLE文の列定義に指定するデータ型
-
表関数列リストに指定するデータ型
-
-
(3) 日時データ
- ■DATE
-
-
年,月,日の情報を持つ日付のデータ型です。
-
データ型を指定する際の記述形式を次に示します。
DATE
-
値の範囲が,0001年1月1日〜9999年12月31日の日付を扱います。
-
データ長は4バイトになります。入力するデータ長は,この長さである必要があります。
-
DATE型のデータ形式を次の図に示します。
図6‒7 DATE型のデータ形式 -
定数は,DATE'2012-03-30'またはDATE'2012/03/30'という形式で記述します。定数については,「6.3 定数」を参照してください。
-
- ■TIME
-
-
時,分,秒の情報を持つ時刻のデータ型です。
-
データ型を指定する際の記述形式を次に示します。
TIME(p),またはTIME
小数秒精度(小数秒の桁数)をpで指定します。pに指定できる値は,0,3,6,9,または12です。
TIMEと指定した場合は,pに0が仮定されます。
-
値の範囲が,0時0分0.000000000000秒〜23時59分59.999999999999秒の時刻を扱います。
-
データ長は,3+↑p÷2↑バイトになります。入力するデータ長は,この長さである必要があります。
-
TIME型のデータ形式を次の図に示します。
図6‒8 TIME型のデータ形式 4ビットで1桁を表します。小数秒精度が奇数の場合は,末尾の4ビットに0が格納されます。
-
定数は,TIME'11:03:58.123456'という形式で記述します。定数については,「6.3 定数」を参照してください。
-
- ■TIMESTAMP(TIMESTAMP WITHOUT TIME ZONE,TIMESTAMP WITH TIME ZONE)
-
-
年,月,日,時,分,秒の情報を持つ時刻印のデータ型です。
-
TIMESTAMP型には,次の2つのデータ型があります。
-
TIMESTAMP WITHOUT TIME ZONE(時刻帯なしの時刻印データ)
-
TIMESTAMP WITH TIME ZONE(時刻帯付きの時刻印データ)
-
-
データ型を指定する際の記述形式を次に示します。
-
TIMESTAMP WITHOUT TIME ZONEの場合
次のどちらかの形式で指定します。
TIMESTAMP(p) TIMESTAMP
-
TIMESTAMP WITH TIME ZONEの場合
次のどちらかの形式で指定します。
TIMESTAMP(p) WITH TIME ZONE TIMESTAMP WITH TIME ZONE
TIMESTAMP WITH TIME ZONE(時刻帯付きの時刻印データ)に入力された値は,協定世界時(UTC)に変換され,時刻帯がUTC(+00:00)のデータとして扱われます。
(例)2025-10-21 15:00+09:00の値は,2025-10-21 06:00+00:00に変換されます。
小数秒精度(小数秒の桁数)をpで指定します。pに指定できる値は,0,3,6,9,または12です。
(p)の指定を省略した場合は,pに0が仮定されます。
-
-
値の範囲が,0001年1月1日0時0分0.000000000000秒〜9999年12月31日23時59分59.999999999999秒の時刻印を扱います。
-
データ長は,7+↑p÷2↑バイトになります。入力するデータ長は,この長さである必要があります。
-
TIMESTAMP型のデータ形式を次の図に示します。
図6‒9 TIMESTAMP型のデータ形式 4ビットで1桁を表します。小数秒精度が奇数の場合は,末尾の4ビットに0が格納されます。
- メモ
-
TIMESTAMP WITH TIME ZONE(時刻帯付きの時刻印データ)は,TIMESTAMP WITHOUT TIME ZONE(時刻帯なしの時刻印データ)に変換されるため(UTCに変換されるため),時刻帯付きの時刻印データも時刻帯なしの時刻印データも同じデータ形式になります。
-
定数は次のような形式で記述します。定数については,「6.3 定数」を参照してください。
-
TIMESTAMP WITHOUT TIME ZONEの場合
TIMESTAMP'2025-07-30 11:03:58'
-
TIMESTAMP WITH TIME ZONEの場合
TIMESTAMP'2025-07-30 11:03:58+09:00' TIMESTAMP'2025-07-30 11:03:58Z'
-
-
(4) バイナリデータ
- ■BINARY
-
-
固定長バイナリデータを扱うデータ型です。
-
データ型を指定する際の記述形式を次に示します。
BINARY(n),またはBINARY
-
バイナリデータの長さ(バイト数)をnで指定します。nは1〜32,000の整数で,nを省略すると1が仮定されます。
-
定数は,X'0A38ef92'という形式で記述します。定数については,「6.3 定数」を参照してください。
-
BINARY型のデータ形式を次の図に示します。
図6‒10 BINARY型のデータ形式
-
- ■VARBINARY
-
-
可変長バイナリデータを扱うデータ型です。
-
データ型を指定する際の記述形式を次に示します。
VARBINARY(n)
-
バイナリデータの最大長(バイト数)をnで指定します。nは1〜32,000の整数でなければなりません。nは省略できません。
-
定数は,X'0A38ef92'という形式で記述します。定数については,「6.3 定数」を参照してください。
-
バイナリデータの長さが0バイトのデータを扱うこともできます。
-
VARBINARY型のデータ形式を次の図に示します。
図6‒11 VARBINARY型のデータ形式 バイナリデータの長さ(L)を2バイトで表します。
-
(5) 論理データ
- ■BOOLEAN
-
-
真,偽,または不定のどれかを取る論理値を表すデータ型です。
-
論理データの不定はナル値と見なされます。
-
データ型を指定する際の記述形式を次に示します。
BOOLEAN
-
データ長は1バイトです。真の場合は'T'(0x54),偽の場合は'F'(0x46)として扱います。
-
定数は,TRUEまたはFALSEと記述します。定数については,「6.3 定数」を参照してください。
-
(6) UUIDデータ
- ■UUID
-
-
UUIDを表すデータ型です。
-
データ型を指定する際の記述形式を次に示します。
UUID
-
データは,16バイトの固定長バイナリデータです。
-
定数は,UUID'd68fab5b-f44c-42ae-8b8d-8da66ab31042'という形式で記述します。定数については,「6.3 定数」を参照してください。
-
UUID型のデータ形式を次の図に示します。
図6‒12 UUID型のデータ形式 - [説明]
-
4ビットで1桁を表します。
AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEEのUUIDデータの場合,次の値が格納されます。
A:0x0~0x9,0xA~0xF
B:0x0~0x9,0xA~0xF
C:0x0~0x9,0xA~0xF
D:0x0~0x9,0xA~0xF
E:0x0~0x9,0xA~0xF
-
HADBで扱うUUIDのバージョンは,UUIDデータを生成したアプリケーションやシステムに依存します。HADBは,UUIDのバージョンを意識した処理は行いません。
-
(7) 配列データ
- ■ARRAY(配列型)
-
-
配列型は,順序付けられた一連のデータを要素とする一次元の配列データを扱うデータ型です。
-
データ型を指定する際の記述形式を次に示します。
要素データ型 ARRAY[最大要素数]
- 要素データ型:
-
配列要素のデータ型を指定します。
要素データ型には,数データ,文字データ,日時データ,バイナリデータ,論理データ,UUIDデータ,または構造データのどれかのデータ型を指定してください。要素データ型の記述形式は,各データ型の記述形式の規則に従います。
- 重要
-
要素データ型に構造データを指定できるのは,CREATE FOREIGN TABLE文の列定義だけです。
- 最大要素数:
-
配列要素の最大数を指定します。
最大要素数には,2~30,000の符号なし整数定数を指定してください。
<指定例>
-
要素データ型がCHAR(5)で,最大要素数が20の場合
CHAR(5) ARRAY[20]
-
要素データ型がINTEGERで,最大要素数が5の場合
INTEGER ARRAY[5]
-
配列データの各要素を,配列要素といいます。各配列要素には,要素番号が割り当てられます。先頭の配列要素の要素番号を1とし,順に2,3,…となる符号なし整数定数の要素番号が各配列要素に割り当てられます。
-
配列要素数が0の配列データを,空の配列データといいます。
-
配列型の列を定義する際の考慮点については,マニュアルHADB システム構築・運用ガイドの配列型の列の定義【カラムストア表】を参照してください。
-
要素データ型に構造データを入れ子にして指定する場合,構造データと配列データの繰り返しは8回までできます。
(例)要素データ型に構造データを8回入れ子にして指定する場合
STRUCT {"A1" INT, "A2" STRUCT {"B1" INT, "B2" STRUCT {"C1" INT, "C2" STRUCT {"D1" INT, "D2" INT ARRAY[2] } ARRAY[3] } ARRAY[4] } ARRAY[5] } ARRAY[6]
-
(8) 構造データ
- ■STRUCT
-
-
構造データは,複数のデータ型から構成されるデータを扱うデータ型です。
- 重要
-
STRUCT型の列は外部表にだけ定義できます。実表にはSTRUCT型の列を定義できません。
-
データ型を指定する際の記述形式を次に示します。
STRUCT {フィールド名 フィールドデータ型〔,フィールド名 フィールドデータ型〕…}- フィールド名
-
構造データのフィールドの名称を指定します。フィールド名の指定規則については,「6.1.4 名前の指定」の「(2) 名前に使用できる文字の規則」を参照してください。
- フィールドデータ型
-
構造データのフィールドのデータ型を指定します。フィールドデータ型には,数データ,文字データ,日時データ,バイナリデータ,論理データ,UUIDデータ,配列データ,または構造データのどれかのデータ型を指定できます。
- メモ
-
フィールド名とフィールドデータ型の組み合わせをフィールドといいます。
<指定例>
-
次のフィールド名とフィールドデータ型から構成されるSTRUCT型の場合
-
A1:INTEGER
-
A2:CHAR(5)
-
A3:DATE
STRUCT {"A1" INTEGER,"A2" CHAR(5),"A3" DATE} -
-
次のフィールド名とフィールドデータ型から構成されるSTRUCT型の場合
-
B1:INTEGER
-
B2:CHAR(5)
-
B3:STRUCT
A1:INTEGER
A2:CHAR(5)
A3:DATE
STRUCT {"B1" INTEGER, "B2" CHAR(5), "B3" STRUCT {"A1" INTEGER,"A2" CHAR(5),"A3" DATE}} -
-
フィールド数は最大1,000個となります。構造データ中に構造データを定義した場合,全構造データのフィールド数の合計が最大1,000個となります。
-
フィールド名は重複できません。ただし,構造データ中に構造データを定義した場合,構造データとその入れ子の構造データで同じフィールド名を指定できます。
-
フィールドデータ型に構造データまたは配列データを入れ子にして指定する場合,構造データと配列データの繰り返しは8回までできます。フィールドデータ型に,構造データまたは配列データを8回入れ子にして指定する場合の例を次に示します。
(例1)
STRUCT {"A1" INT, "B1" STRUCT {"A2" INT, "B2" STRUCT {"A3" INT, "B3" STRUCT {"A4" INT, "B4" STRUCT {"A5" INT, "B5" STRUCT {"A6" INT, "B6" STRUCT {"A7" INT, "B7" STRUCT {"A8" INT, "B8" STRUCT {"A9" INT, "B9" INT}}}}}}}}}(例2)
STRUCT {"A1" INT, "B1" STRUCT {"A2" INT, "B2" STRUCT {"A3" INT, "B3" STRUCT {"A4" INT, "B4" STRUCT {"A5" INT, "B5" STRUCT {"A6" INT, "B6" STRUCT {"A7" INT, "B7" STRUCT {"A8" INT, "B8" INT} ARRAY[9]}}}}}}}
-