数値データ型は、数値リテラルを使用して固定小数点数と浮動小数点数の値を指定し、0、無限大、および非数値("Not a Number"またはNaN)もサポートします。このセクションでは、主に数値型(NUMBER)と浮動小数点数について説明します。
数値型(NUMBER)
NUMBER データ型は、固定小数点数と浮動小数点数を格納します。この型は、ほぼ任意の桁数の数値を格納できます。
厳密さ(Precision)
厳密さは、数値の全桁数を表します。厳密さが指定されていない場合、提供された元の値のまま格納され、四捨五入は行われません。
小数部の桁数(Scale)
小数部の桁数は、小数点から最も低い有効桁までの桁数を指定します。正の小数部の桁数は、小数点の右側の数字を最も低い有効数字まで数えます。負の小数部の桁数は、小数点の左側の数字を数えます。小数部の桁数なしで厳密さを指定した場合(例:
NUMBER(6))、小数部の桁数は0になります。
数値リテラルは、最大で38ビットの厳密さを持つ数値を格納できます。リテラルが要求する厳密さが NUMBER、BINARY_FLOAT、または BINARY_DOUBLE が提供する厳密さよりも高い場合、OceanBaseデータベースはその値を切り捨てます。リテラルの範囲が NUMBER、BINARY_FLOAT、または BINARY_DOUBLE がサポートする範囲を超える場合、OceanBaseデータベースはエラーをスローします。
例えば、NUMBER(8,2) は、厳密さが8、小数部の桁数が2を意味します。したがって、データベースは100,000を100000.00として格納します。
以下は有効な NUMBER 型の数値です:
12
+6.87
0.5
25e-03
-9
以下は有効な FLOAT-Point 型の浮動小数点数です:
25f
+6.34F
0.5d
-1D
浮動小数点数
OceanBaseデータベースは、浮動小数点数用に特別に BINARY_FLOAT と BINARY_DOUBLE の2種類の数値データ型を提供しています。
これらの型は NUMBER データ型が提供するすべての基本的な機能をサポートします。ただし、NUMBER は10進法の厳密さを使用するのに対し、BINARY_FLOAT と BINARY_DOUBLE は2進法の厳密さを使用します。これにより、より高速な算術計算が可能になり、通常はストレージ要件が削減されます。
BINARY_FLOAT と BINARY_DOUBLE は近似数値データ型です。これらは、10進法の値の厳密な表現ではなく、近似表現を格納します。例えば、値0.1は BINARY_DOUBLE または BINARY_FLOAT では厳密に表現できません。これらは科学計算で頻繁に使用されます。その挙動は、Javaのデータ型 FLOAT および DOUBLE と類似しています。
以下は有効な浮動小数点数です:
1.2
-1.1
0.
数値データ型は、数値の浮動小数点型に加えて、正の無限大、負の無限大、および非数値(not a number / NaN)などの特殊な表現も提供します。詳細は以下のとおりです:
binary_double_infinity
binary_double_nan
binary_float_infinity
binary_float_nan