メニュー
Amazon Redshift
データベース開発者ガイド (API Version 2012-12-01)

数値型

数値データ型には、整数型、10 進数型、および浮動小数点数型などがあります。

整数型

SMALLINT、INTEGER、および BIGINT の各データ型を使用して、各種範囲の数値全体を格納します。各データ型の許容範囲の外にある値を格納することはできません。

名前 ストレージ 範囲
SMALLINT または INT2 2 バイト -32768~+32767
INTEGER、INT、または INT4 4 バイト -2147483648~+2147483647
BIGINT または INT8 8 バイト -9223372036854775808~9223372036854775807

DECIMAL 型または NUMERIC 型

DECIMAL データ型または NUMERIC データ型を使用し、ユーザー定義の精度で値を格納します。DECIMAL キーワードと NUMERIC キーワードは、ほぼ同じ意味で使用されます。このドキュメントでは、このデータ型を表す用語として decimal を優先的に使用します。numeric という用語は一般的に整数、10 進数、および浮動小数点のデータ型を称する場合に使用します。

ストレージ 範囲
可変。非圧縮の DECIMAL 型の場合は最大 128 ビット。 最大で 38 桁の精度を持つ、128 ビットの符号付き整数。

テーブル内に DECIMAL 列を定義するには、precisionscale を次のように指定します。

Copy
decimal(precision, scale)

precision

値全体での有効な桁の合計。小数点の両側の桁数。例えば、数値 48.2891 の場合は精度が 6、スケールが 4 となります。指定がない場合、デフォルトの精度は 18 です。最大精度は 38 です。

入力値で小数点の左側の桁数が、列の精度から列のスケールを引いて得られた桁数を超えている場合、入力値を列にコピー (または挿入も更新も) することはできません。このルールは、列の定義を外れるすべての値に適用されます。例えば、numeric(5,2) 列の値の許容範囲は、-999.99999.99 です。

scale

小数点の右側に位置する、値の小数部における小数の桁数です。整数のスケールはゼロです。列の仕様では、スケール値は精度値以下である必要があります。指定がなければ、デフォルトのスケールは 0 です。最大スケールは 37 です。

テーブルにロードされた入力値のスケールが列のスケールより大きい場合、値は指定されたスケールに丸められます。SALES テーブルの PRICEPAID 列が DECIMAL(8,2) 列である場合を例にとります。DECIMAL(8,4) の値を PRICEPAID 列に挿入すると、値のスケールは 2 に丸められます。

Copy
insert into sales values (0, 8, 1, 1, 2000, 14, 5, 4323.8951, 11.00, null); select pricepaid, salesid from sales where salesid=0; pricepaid | salesid -----------+--------- 4323.90 | 0 (1 row)

ただし、テーブルから選択された値の明示的なキャストの結果は丸められません。

注記

DECIMAL(19,0) 列に挿入できる最大の正の値は、9223372036854775807 (263 -1) です。最大の負の値は -9223372036854775807 です。例えば、値 9999999999999999999 (19 桁の 9 の並び) の挿入を試みると、オーバーフローエラーが発生します。小数点の位置に関係なく、Amazon Redshift が DECIMAL 数として表現できる最大の文字列は 9223372036854775807 です。例えば、DECIMAL(19,18) 列にロードできる最大値は 9.223372036854775807 です。これらのルールは、DECIMAL 値が内部で 8 バイト整数として格納されていることから来ています。Amazon Redshift では、19 桁の精度が必要でない場合に、この精度の DECIMAL 値を定義しないことをお勧めします。

128 ビットの DECIMAL 列または NUMERIC 列の使用に関する注意事項

アプリケーションで最大精度が必要でない場合、DECIMAL 列に最大精度を勝手に割り当てないでください。128 ビット値は、ディスク容量を 64 ビット値の場合の 2 倍使用するので、クエリの実行時間が長くなる可能性があります。

浮動小数点型

可変精度の数値を格納するには、REAL および DOUBLE PRECISION のデータ型を使用します。これらのデータ型は非正確型です。すなわち、一部の値が近似値として格納されるため、特定の値を格納して返すと若干の相違が生じる場合があります。正確な格納および計算が必要な場合は (金額の場合など)、DECIMAL データ型を使用します。

名前 ストレージ 範囲
REAL または FLOAT4 4 バイト 有効な精度桁数は 6 桁
DOUBLE PRECISION、FLOAT8、または FLOAT 8 バイト 有効な精度桁数は 15 桁

例えば、REAL 列への以下の挿入の結果に注目してください。

Copy
create table real1(realcol real); insert into real1 values(12345.12345); insert into real1 values(123456.12345); select * from real1; realcol --------- 123456 12345.1 (2 rows)

これらの挿入値は、REAL 列の 6 桁の有効精度桁数の制限に適合するように切り捨てられます。