View a markdown version of this page

数値型 - Amazon Redshift

Amazon Redshift は、2026 年 6 月 30 日以降、Python UDF の使用をサポートしなくなります。これは段階的に実施されます。Python のサポート終了と移行オプションの詳細については、2025 年 6 月 30 日に公開されたブログ記事を参照してください。

数値型

数値データ型には、整数型、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 列を定義するには、precision と scale を次のように指定します。

decimal(precision, scale)
precision

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

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

scale

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

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

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) です。最大の負の値は -9223372036854775808 です。例えば、値 9999999999999999999 (19 桁の 9 の並び) の挿入を試みると、オーバーフローエラーが発生します。小数点の位置に関係なく、Amazon Redshift が DECIMAL 数として表現できる最大の文字列は 9223372036854775807 です。例えば、DECIMAL(19,18) 列にロードできる最大値は 9.223372036854775807 です。

これらの規則は、有効桁数が 19 桁以下の DECIMAL 値は内部で 8 バイトの整数として格納され、有効桁数が 20~38 桁の DECIMAL 値は 16 バイトの整数として格納されるためです。

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

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

浮動小数点型

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

REAL は、IEEE 標準 754 の 2 進浮動小数点演算に従って単精度浮動小数点形式を表します。精度は約 6 桁で、範囲は約 1E-37 から 1E+37 です。このデータ型を FLOAT4 として指定することもできます。

DOUBLE PRECISION は、IEEE 標準 754 の 2 進浮動小数点演算に従って倍精度浮動小数点形式を表します。精度は約 15 桁で、範囲は約 1E-307 から 1E+308 です。このデータ型を FLOAT または FLOAT8 として指定することもできます。

通常の数値に加えて、浮動小数点型にはいくつかの特別な値があります。SQL でこれらの値を使用するときは、一重引用符で囲んでください。

  • NaN - Not a Number (非数)

  • Infinity — Infinity (無限大)

  • -Infinity — Negative Infinity (負の無限大)

例えば、customer_activity テーブルの day_charge 列に非数を挿入するには、次の SQL を実行します。

insert into customer_activity(day_charge) values('NaN');