

 Amazon Redshift は、パッチ 198 以降、新しい Python UDF の作成をサポートしなくなります。既存の Python UDF は、2026 年 6 月 30 日まで引き続き機能します。詳細については、[ブログ記事](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)を参照してください。

# 数値型
<a name="r_Numeric_types201"></a>

**Topics**
+ [整数型](#r_Numeric_types201-integer-types)
+ [DECIMAL 型または NUMERIC 型](#r_Numeric_types201-decimal-or-numeric-type)
+ [128 ビットの DECIMAL または NUMERIC の列の使用に関する注意事項](#r_Numeric_types201-notes-about-using-128-bit-decimal-or-numeric-columns)
+ [浮動小数点型](#r_Numeric_types201-floating-point-types)
+ [数値に関する計算](r_numeric_computations201.md)
+ [整数リテラルと浮動小数点リテラル](r_numeric_literals201.md)
+ [数値型を使用する例](r_Examples_with_numeric_types201.md)

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

## 整数型
<a name="r_Numeric_types201-integer-types"></a>

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

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_Numeric_types201.html)

## DECIMAL 型または NUMERIC 型
<a name="r_Numeric_types201-decimal-or-numeric-type"></a>

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

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_Numeric_types201.html)

テーブル内に 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 の列の使用に関する注意事項
<a name="r_Numeric_types201-notes-about-using-128-bit-decimal-or-numeric-columns"></a>

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

## 浮動小数点型
<a name="r_Numeric_types201-floating-point-types"></a>

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

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

DOUBLE PRECISION は、IEEE 標準 754 の 2 進浮動小数点演算に従って倍精度浮動小数点形式を表します。精度は約 15 桁で、範囲は約 1E-307 から 1E\$1308 です。このデータ型を 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');
```