16.20 - NUMBERデータ型 - Teradata Vantage NewSQL Engine

Teradata Vantage™ データ タイプおよびリテラル

prodname
Teradata Database
Teradata Vantage NewSQL Engine
vrm_release
16.20
category
プログラミング リファレンス
featnum
B035-1143-162K-JPN

目的

精度と位取りに任意選択の制限がある数値を表わします。

構文



n
精度を指定します。
範囲は1~38です。
m
位取りを指定します。これは、小数点の右側の最大桁数を示します。
*を指定した場合、mの範囲は0~38になります。
nを指定した場合、mの範囲は0~nになります。
attributes
適切なデータ型属性、列記憶属性、または列制約属性。
特定の情報については、主なデータ型属性および制約属性を参照してください。
indicate NUMBER with the system limits for precision and scale
NUMBER、または同等であるNUMBER (*)
limit the scale
NUMBER (*,m)
mで位取りを指定します。範囲は0~38になります。
limit the precision and scale
  • NUMBER (n,m)
  • NUMBER (n)、これはNUMBER (n,0)と同等
nで精度、mで位取りを指定します。値nは1~38の範囲で指定できます。スケールは0~nの範囲で指定できます。

ANSI準拠

NUMBERは、ANSI SQL:2011規格に対するTeradataの拡張機能です。

ストレージ

NUMBERは、指数と仮数で構成された可変長の値として格納されます。指数の基数は10です。このため、一般的な10進数を正確に表わすことができます。

1つの例外を除いて、記憶域のレイアウトは以下のようになります。

1バイト 1~17バイト
指数 仮数

例外は、値がゼロの場合です。これは、指数および仮数を持たない、長さゼロのNUMBERフィールドで示されます。

以下のテーブルは、記憶域の要件とNUMBERの値の範囲をまとめたものです。

データ型 必要なデータベース記憶域(バイト単位) 数値の範囲
NUMBER(n,m) 0~18。実際に格納されている値に基づきます。 全体の桁数がnで、小数の桁数がmの数値。
NUMBER(*,m) 0~18。実際に格納されている値に基づきます。 小数の桁数が最大mの数値。
NUMBER(*) 0~18。実際に格納されている値に基づきます。 ± [1E-130~9.99…9E125]、0を含む

COMPRESS句を指定すると、値は行の圧縮部分に格納され、長さを示す余分な1バイトが必要になります。COMPRESS句がないと、値は行の可変部分に格納され、2バイト必要になります。可変部分がある行ごとに2バイト必要です。

NUMBERの外部表現

フィールド モードでは、NUMBERデータはFORMAT句に基づいて返されます。NUMBERのデフォルト形式、およびNUMBERデータでのFORMAT句の使用の詳細については、データ型のデフォルトの形式およびFORMAT句および数値の形式を参照してください。

フィールド モード以外の応答モードの場合、NUMBERデータは、ほとんどの値で以下の表現を持ちます。

1バイトの長さ 2バイトの位取り 1~17バイトの位取りしていない値の2の補足表現(クライアント固有のエンディアン)。

NUMBERがゼロまたはNULLの場合、長さの値はゼロになり、位取りまたは位取りしていない値が必要ないことを示します。

NUMBERとDECIMALの違い

NUMBER (n,m)の機能はDECIMAL (n,m)とよく似ています。また、DECIMALがサポートされている場合なら、いつでも使用できます。

NUMBERは以下の点でDECIMALと異なります。

DECIMAL NUMBER
データ型は固定長であり、精度によって1、2、4、8または16バイトになります。 データ型は可変長であり、内部的には0~18バイト、外部的には1~20バイトの間で変化します。
小数は、10のべき乗(指数は、小数部の桁数と等しい)によって位取りされます。この数は2の2進補数として格納されます。 NUMBERは、指数と仮数で構成された可変長の値として格納されます。
既存のDECIMAL列の精度や位取りを、データ行の変更なしに変更することはできません。 既存のNUMBER列の精度や位取りをデータ行の変更なしに増加できます。ただし、いくつかの制限があります。詳細は、<Teradata Vantage™ SQLデータ定義言語-構文規則および例、B035-1144>の「ALTER TABLE」を参照してください。
DECIMAL算術の中間結果の精度は、算術式で使用される引数に応じて、15、18、または38になります。 NUMBERデータ型の計算は38桁の精度が保証されていますが、多くの場合、39桁または40桁の精度で実行されます。精度と位取りが制限されていない場合、NUMBERデータは計算について完全な精度と位取りを保持します。

そのため、算術演算1./3.をDECIMALで実行すると0.が返されますが、NUMBERで実行すると.3333333333...が返されることになります。

切り上げ/切り捨てモードはDBS制御のRoundHalfWayMagUpフィールドで制御されます。詳細は、切り上げ/切り捨てを参照してください。 切り上げ/切り捨てモードはDBS制御のRoundNumberAsDecフィールドで制御されます。詳細は、切り上げ/切り捨てを参照してください。
DECIMALに精度または位取りを指定していない場合、デフォルトはDECIMAL(5,0)になります。 NUMBERに精度または位取りを指定していない場合、デフォルトはシステム制限の精度および位取りを持つNUMBERになります。

NUMBERとFLOATの違い

数値は次のように表わすことができます。
  • NUMBER(*,m)
  • NUMBER(*)、これはNUMBERと同等

FLOATがサポートされている場合は、いつでもNUMBERを使用できます。ただし、NUMBERは以下の点でFLOATと異なります。

FLOAT NUMBER
データ型は固定長であり、8バイトの記憶域を使用します。 データ型は可変長であり、内部的には0~18バイト、外部的には1~20バイトの間で変化します。
FLOATはIEEE-754規格を使用して格納されます。これは基数2を使用して浮動小数点数を表現します。また、一般には2進浮動小数点として知られています。

この格納スキーマは、すべての10進数値を正確に表現できません。

NUMBERは、指数と仮数で構成された可変長の値として格納されます。

この格納スキーマは10進数の基数を使用するため、正確に10進数の値を格納します。

FLOATは、15桁数の精度のみを提供できます。 NUMBERデータ型の計算は38桁の精度が保証されていますが、多くの場合、39桁または40桁の精度で実行されます。精度と位取りが制限されていない場合、NUMBERデータは計算について完全な精度と位取りを保持します。

使用上の注意

NUMBERデータ型には、以下の利点があります。
  • 既存のテーブルのNUMBER列の精度または位取りを、データ行の修正なしで増加させる機能を提供するため、数字列の定義における柔軟性が高まります。ただし、いくつかの制限があります。
  • NUMBERは格納される値に応じて0バイト~18バイトの間で変化できる可変長データ型であるため、数値型データの格納における効率が高まります。
  • 結果が入力の精度または位取りによって制限されないため、DECIMALデータ型と比べて、計算における柔軟性が高まります。
  • 範囲がDECIMALデータ型より広くなります。
  • NUMBERの方が保証される精度が高く、また、NUMBERは一般的な小数を正確に表わすことができるため、FLOATデータ型より正確度が高くなります。
  • 他のデータベースとの互換性が高まります。いくつかのデータベース ベンダーでは、類似したNUMBERデータ型を提供しています。
多くの目的に対して、NUMBERデータ型は正確な結果を提供できます。ただし、これは浮動小数点タイプです。浮動小数点タイプをサポートしているデータベース ベンダーは、評価の順序によっては異なる計算結果を出す場合があります。つまり、Teradata Databaseにより生成される結果が他のベンダーの結果と異なることや、同じクエリーを別の方法で実行しても同じ結果になることもあります。

例: NUMBERデータ型

次のテーブル定義について考察してみます。

CREATE TABLE num_tab
  (n1 NUMBER(*,3),
   n2 NUMBER,
   n3 NUMBER(*),
   n4 NUMBER(5,1),
   n5 NUMBER(3) );

以下のテーブルは、NUMBER (3)として定義された列に各種の値を挿入した場合の結果を示したものです。

挿入する値 列n5の値
1.234 1
123.6789 124
1234.56 挿入された値が列n5のサイズを超えるため、エラーが返されます。

以下のテーブルは、NUMBER (*,3)として定義された列に各種の値を挿入した場合の結果を示したものです。

挿入する値 列n1の値
1.234 1.234
1234.6789 1234.679

関連トピック

詳細情報 参照先
NUMBERタイプの切り上げ/切り捨て 切り上げ/切り捨て
NUMBER引数を使用した式の結果 Teradata Vantage™ SQL関数、式、および述部、B035-1145.
NUMBERのデフォルト形式、およびNUMBERデータでのFORMAT句の使用 データ型のデフォルトの形式およびFORMAT句および数値の形式