数値データ型

数値型では、正および負の固定小数点数と浮動小数点数、0(ゼロ)、無限大、および演算での未定義の結果として生成される値(NaN(非数))が格納されます。

TimesTenは、正確な数値型と近似値型の両方のデータ型をサポートします。算術演算は数値型に対してのみ実行できます。同様に、SUM集計およびAVG集計でも数値型が必要になります。

正確な数値型は次のとおりです。

近似値型は、次のとおりです。

NUMBER

NUMBERデータ型は、0(ゼロ)と、絶対値が1.0×10-130以上1.0×10126未満の範囲にある正と負の固定小数点数を格納します。NUMBERの各値は5から22バイトである必要があります。

固定小数点数はNUMBER(p,s)として指定します。

  • 引数pは精度(有効な10進数の総桁数)です。最上位桁は最も左にあるゼロ以外の桁で、最下位桁は最も右の既知の桁です。

  • 引数sはスケール(小数点から最下位桁までの桁数)です。スケールの範囲は-84から127です。

    • 正のスケールは、小数点の右側にある最下位桁まで(最下位桁も含む)の有効桁数です。

    • スケールが負の場合、小数点の左側にある桁数です。この場合は最下位有効桁を含みません。スケールが負の場合、数値は整数部分の右から指定された桁数のみ丸められるため、最下位有効桁は小数点の左側になります。

スケールは、精度より大きくできます。たとえば、E表記法があります。スケールが精度より大きい場合、精度は小数点の右側の最大有効桁数を指定します。たとえば、列をNUMBER(4,5)型として定義し、その列に.000127を挿入すると、その値は.00013として格納されます。小数点以下1桁目の数字はゼロである必要があります。TimesTenでは、値は小数点以下5桁に丸められます。

値が精度を超えると、エラーが戻されます。値がスケールを超えると、その値は丸められます。

NUMBER(p)は、精度pおよびスケール0の固定小数点数を表しているため、NUMBER(p,0)と同じです。

浮動小数点数はNUMBERとして指定してください。精度およびスケールを指定しない場合は、最大精度および最大スケールが使用されます。

次の例では、NUMBERデータ型で定義され、異なる精度とスケールが指定された列col6col7col8およびcol9を追加することにより、表numericsを変更します。

Command> ALTER TABLE numerics ADD col6 NUMBER;
Command> ALTER TABLE numerics ADD col7 NUMBER (4,2);
Command> ALTER TABLE numerics ADD col8 NUMBER (4,-2);
Command> ALTER TABLE numerics ADD col8 NUMBER (2,4);
Command> ALTER TABLE numerics ADD col9 NUMBER (2,4);
Command> DESCRIBE numerics;
Table USER1.NUMERICS:
  Columns:
    COL1                            TT_TINYINT
    COL2                            TT_SMALLINT
    COL3                            TT_INTEGER
    COL4                            TT_INTEGER
    COL5                            TT_BIGINT
    COL6                            NUMBER
    COL7                            NUMBER (4,2)
    COL8                            NUMBER (4,-2)
    COL9                            NUMBER (2,4)
1 table found.
(primary key columns are indicated with *)

次の例では、表numbercomboを作成し、異なる精度とスケールを指定したNUMBERデータ型で列を定義します。値123.89が列に挿入されます。

Command> CREATE TABLE numbercombo (col1 NUMBER, col2 NUMBER (3), 
                                   col3 NUMBER (6,2), 
                                   col4 NUMBER (6,1), 
                                   col5 NUMBER (6,-2));
Command> DESCRIBE numbercombo;
Table USER1.NUMBERCOMBO:
  Columns:
    COL1                            NUMBER
    COL2                            NUMBER (3)
    COL3                            NUMBER (6,2)
    COL4                            NUMBER (6,1)
    COL5                            NUMBER (6,-2)
1 table found.
(primary key columns are indicated with *)
Command> INSERT INTO numbercombo VALUES (123.89,123.89,123.89,123.89,123.89);
1 row inserted.
Command> VERTICAL ON;
Command> SELECT * FROM numbercombo;
  COL1:   123.89
  COL2:   124
  COL3:   123.89
  COL4:   123.9
  COL5:   100
1 row found.

次の例では、表を作成し、NUMBER(4,2)データ型で列を定義します。値123.89を挿入しようとすると、オーバーフローのエラーになります。

Command> CREATE TABLE invnumbervalue (col6 NUMBER (4,2));
Command> INSERT INTO invnumbervalue VALUES (123.89);
 2923: Number type value overflow
The command failed.

次の例では、表を作成し、精度より大きいスケールを使用したNUMBERデータ型で列を定義します。値が列に挿入されます。

Command> CREATE TABLE numbercombo2 (col1 NUMBER (4,5), col2 NUMBER (4,5), 
                                    col3 NUMBER (4,5), col4 NUMBER (2,7), 
                                    col5 NUMBER (2,7), col6 NUMBER (2,5), 
                                    col7 NUMBER (2,5));
Command> INSERT INTO numbercombo2 
         VALUES (.01234, .00012, .000127, .0000012, .00000123, 1.2e-4, 1.2e-5);
1 row inserted.
Command> DESCRIBE numbercombo2;
Table USER1.NUMBERCOMBO2:
  Columns:
    COL1                            NUMBER (4,5)
    COL2                            NUMBER (4,5)
    COL3                            NUMBER (4,5)
    COL4                            NUMBER (2,7)
    COL5                            NUMBER (2,7)
    COL6                            NUMBER (2,5)
    COL7                            NUMBER (2,5)
1 table found.

(primary key columns are indicated with *)
Command> SELECT * FROM numbercombo2;
  COL1:   .01234
  COL2:   .00012
  COL3:   .00013
  COL4:   .0000012
  COL5:   .0000012
  COL6:   .00012
  COL7:   .00001
1 row found.

TT_BIGINT

TT_BIGINTデータ型は、-9,223,372,036,854,775,808(-263)から9,223,372,036,854,775,807(263-1)の範囲の符号付き整数です。このデータ型で必要な記憶域は8バイトであるため、NUMBERデータ型よりサイズが小さくなります。また、NUMBERデータ型より高いパフォーマンスを提供します。BIGINTは指定できません。

次の例では、表numericsを変更し、BIGINTデータ型でcol5を追加します。エラーが生成されます。2つ目のALTER TABLEによって、TT_BIGINTデータ型でcol5が追加されます。

Command> ALTER TABLE numerics ADD COLUMN col5 BIGINT;
 3300: BIGINT is not a valid type name; use TT_BIGINT instead
The command failed.
Command> ALTER TABLE numerics ADD COLUMN col5 TT_BIGINT;
Command> DESCRIBE numerics;
Table USER1.NUMERICS:
  Columns:
    COL1                            TT_TINYINT
    COL2                            TT_SMALLINT
    COL3                            TT_INTEGER
    COL4                            TT_INTEGER
    COL5                            TT_BIGINT
1 table found.
(primary key columns are indicated with *)

TT_INTEGER

TT_INTEGERデータ型は、-2,147,483,648(-231)から2,147,483,647(231 -1)の範囲の符号付き整数です。このデータ型で必要な記憶域は4バイトであるため、NUMBERデータ型よりサイズが小さくなります。また、NUMBERデータ型より高いパフォーマンスを提供します。TT_INTEGERのかわりにTT_INTを指定できます。INTEGERまたはINTを指定すると、これらの型はNUMBER(38)にマップされます。

次の例では、表numericsを変更し、INTデータ型でcol3を追加します。表の説明にデータ型がNUMBER(38)であることが示されています。列col3は削除されます。2つ目のALTER TABLEによって、INTEGERデータ型でcol2が追加されます。表の説明にデータ型がNUMBER(38)であることが示されています。列col3は削除されます。次に、データ型TT_INTEGERおよびTT_INTで、列col3およびcol4が追加されます。表の説明に両方のデータ型がTT_INTEGERであることが示されます。

Command> ALTER TABLE numerics ADD col3 INT;
Command> DESCRIBE numerics;
Table USER1.NUMERICS:
  Columns:
    COL1                            TT_TINYINT
    COL2                            TT_SMALLINT
    COL3                            NUMBER (38)
1 table found.
(primary key columns are indicated with *)
Command> ALTER TABLE numerics  col3;
Command> ALTER TABLE numerics ADD col3 INTEGER;
Command> DESCRIBE numerics;
Table USER1.NUMERICS:
Columns:
    COL1                            TT_TINYINT
    COL2                            TT_SMALLINT
    COL3                            NUMBER (38)
1 table found.
(primary key columns are indicated with *)
Command> ALTER TABLE numerics  col3;
Command> ALTER TABLE numerics ADD COLUMN col3 TT_INTEGER;
Command> DESCRIBE numerics;
Table USER1.NUMERICS:
Columns:
    COL1                            TT_TINYINT
    COL2                            TT_SMALLINT
    COL3                            TT_INTEGER
1 table found.
(primary key columns are indicated with *)
Command> ALTER TABLE numerics ADD col4 TT_INT;
Command> DESCRIBE numerics;
Table USER1.NUMERICS:
Columns:
    COL1                            TT_TINYINT
    COL2                            TT_SMALLINT
    COL3                            TT_INTEGER
    COL4                            TT_INTEGER
1 table found.
(primary key columns are indicated with *)

TT_SMALLINT

TT_SMALLINTデータ型は、-32,768(-215)から32,767(215-1)の範囲の符号付き整数です。このデータ型で必要な記憶域は2バイトであるため、NUMBERデータ型よりサイズが小さくなります。また、NUMBERデータ型より高いパフォーマンスを提供します。SMALLINTデータ型は、指定することはできますが、NUMBER(38)にマップされます。

次の例では、表numericsを変更し、SMALLINTデータ型でcol2を追加します。表の説明にデータ型がNUMBER(38)であることが示されています。列col2は削除されます。2つ目のALTER TABLEによって、TT_SMALLINTデータ型でcol2が追加されます。

Command> ALTER TABLE numerics ADD COLUMN col2 SMALLINT;
Command> DESCRIBE Numerics;
Table USER1.NUMERICS:
  Columns:
    COL1                            TT_TINYINT
    COL2                            NUMBER (38)
1 table found.
(primary key columns are indicated with *)
Command> ALTER TABLE numerics  COLUMN col2;
Command> ALTER TABLE numerics ADD COLUMN col2 TT_SMALLINT;
Command> DESCRIBE numerics;
Table USER1.NUMERICS:
  Columns:
    COL1                            TT_TINYINT
    COL2                            TT_SMALLINT
1 table found.
(primary key columns are indicated with *)

TT_TINYINT

TT_TINYINTデータ型は、0から255 (28 -1)の範囲の符号なし整数です。このデータ型で必要な記憶域は1バイトであるため、NUMBERデータ型よりサイズが小さくなります。また、NUMBERデータ型より高いパフォーマンスを提供します。TT_TINYINTを否定するデータ型はTT_SMALLINTです。また、TINYINTを指定することはできません。

次の例では、col1という列をデータ型TINYINTで定義するnumericsという表を最初に作成します。エラーが戻されます。その後、データ型TT_TINYINTで列を再定義します。

Command> CREATE TABLE numerics (col1 TINYINT);
 3300: TINYINT is not a valid type name; use TT_TINYINT instead
The command failed.
Command> CREATE TABLE numerics (col1 TT_TINYINT);
Command> DESCRIBE numerics;
Table USER1.NUMERICS:
  Columns:
    COL1                            TT_TINYINT
1 table found.
(primary key columns are indicated with *)

浮動小数点数

浮動小数点数には、小数点を含めることも、含めないこともできます。また、浮動小数点数の範囲は、指数を使用して拡張することができます(たとえば、1.2E-20などです)。

浮動小数点数ではスケールを使用しません。これは、小数点の後に表示できる桁数が制限されていないためです。

バイナリの浮動小数点数は、バイナリ精度(数字0と1)を使用して格納されます。NUMBERデータ型の場合は、10進数の精度(数字0から9)を使用して格納されます。

NUMBERでサポートされている範囲と精度内にあるリテラル値は、NUMBERとして格納されます。これは、リテラルが10進数の精度を使用して表されるためです。

浮動小数点数には、次のいずれかのデータ型を使用します。

BINARY_DOUBLE

BINARY_DOUBLEは、64ビット倍精度の浮動小数点数です。

BINARY_FLOATおよびBINARY_DOUBLEはいずれも、特別な値であるInf-InfおよびNaN(非数)をサポートし、IEEE標準に準拠しています。

浮動小数点数の制限は次のとおりです:

  • BINARY_FLOAT

    • 正の最小有限値: 1.17549E-38F

    • 正の最大有限値: 3.40282E+38F

  • BINARY_DOUBLE

    • 正の最小有限値: 2.22507485850720E-308

    • 正の最大有限値: 1.79769313486231E+308

次の例では表を作成し、BINARY_FLOATおよびBINARY_DOUBLEデータ型で2つの列を定義します。

Command> CREATE TABLE BfBd (Col1 BINARY_FLOAT, Col2 BINARY_DOUBLE);
Command> DESCRIBE BfBd;
Table UISER1.BFBD:
  Columns:
    COL1                            BINARY_FLOAT
    COL2                            BINARY_DOUBLE
1 table found.
(primary key columns are indicated with *)

BINARY_FLOAT

BINARY_FLOATは、32ビット単精度の浮動小数点数です。

FLOATおよびFLOAT(n)

TimesTenでは、ANSI型FLOATもサポートされます。FLOATは、正確な数値型であり、NUMBER型として実装されます。nの値は、格納できる精度のビット数(1から126)を示します。2進精度から10進精度に変換するには、nに0.30103を乗算します。10進精度から2進精度に変換するには、10進精度に3.32193を乗算します。2進精度の126桁は、10進精度の38桁とほぼ等しくなります。