数値データ型は、数値リテラルを使用して固定小数点数と浮動小数点数の値を指定します。また、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データベースは、浮動小数点数用に特別に2種類の数値データ型を提供しています:BINARY_FLOAT と BINARY_DOUBLE。
これらの型は、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