

 Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 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)

數值資料類型包括整數、小數和符點數。

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

使用 SMALLINT、INTEGER 和 BIGINT 資料類型來儲存各種範圍的整數。您不能儲存超出每種類型允許範圍的值。

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

## DECIMAL 或 NUMERIC 類型
<a name="r_Numeric_types201-decimal-or-numeric-type"></a>

使用 DECIMAL 或 NUMERIC 資料類型，以*使用者定義的精確度*來儲存數值。DECIMAL 和 NUMERIC 關鍵字可互換使用。在本文件中，*小數*是此資料類型的首選用詞。*數值*一詞通常是用來指稱整數、小數和浮點資料類型。

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

藉由指定 *precision* 和 *scale*，來定義資料表中的 DECIMAL 欄：

```
decimal(precision, scale)
```

 *precision*   
整個值中有效位數的總數：小數點兩邊的位數數量。例如，數字 `48.2891` 的精確度 (有效位數) 為 6，小數位數為 4。如果未指定，預設的精確度為 18，最高精確度為 38。  
 如果在輸入值中，小數點左邊的位數數目，超過資料欄的精確度減去其小數位數，就無法將此值複製 (或插入或更新) 到資料欄中。此規則適用於超出資料欄定義範圍之外的任何值。例如，`numeric(5,2)` 欄的值，其允許的範圍為 `-999.99` 到 `999.99`。

 *scale*   
數值小數部分中，位於小數點右邊的小數位數數目。整數的小數位數為 0。在資料欄的規格中，小數位數的值必須小於或等於精確度的值。如果未指定，預設的小數位數為 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 位元值的兩倍，而且可能會減慢查詢執行時間。

## 浮點類型
<a name="r_Numeric_types201-floating-point-types"></a>

使用 REAL 和 DOUBLE PRECISION 資料類型，以*可變精確度*來儲存數值。這些是*不精確*的類型，代表某些數值會以近似值儲存，因此在儲存和傳回特定值時，可能會造成些微的出入。如果您需要精確的儲存和計算 (例如貨幣金額)，請使用 DECIMAL 資料類型。

REAL 代表遵循二進位浮點數運算之 IEEE 標準 754 的單精確度浮點格式。它具有大約 6 位數的精確度，並且範圍約為 1E-37 到 1E\$137。您也可以將此資料類型指定為 FLOAT4。

DOUBLE PRECISION 代表遵循二進位浮點數運算之 IEEE 標準 754 的雙精確度浮點格式。它具有大約 15 位數的精確度，並且範圍約為 1E-307 到 1E\$1308。您也可以將此資料類型指定為 FLOAT 或 FLOAT8。

除了普通的數值之外，浮點類型還有幾個特殊值。在 SQL 中使用這些值時，請使用單引號：
+ `NaN` - 非數字。
+ `Infinity`— 無窮大
+ `-Infinity`— 負無窮大

例如，要在資料表 `customer_activity` 的欄 `day_charge` 中插入非數字，請執行以下 SQL：

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