數值類型 - AWS Clean Rooms

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

數值類型

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

整數類型

使用 SMALLINT、INTEGER 和 BIGINT 資料類型來儲存各種範圍的整數。您無法將值儲存在每個類型的允許範圍之外。

名稱 儲存 範圍
SMALLINT 2 位元組 -32768 到 +32767
整數或整數 4 位元組 -2147483648 到 +2147483647
BIGINT 8 位元組 -9223372036854775808 到 9223372036854775807

DECIMAL 或 NUMERIC 類型

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

儲存 範圍
變數,未壓縮的 DECIMAL 類型最多 128 位元。 128 位元帶正負號的整數,具備最高 38 個位數的精確度。

藉由指定 precisionscale,來定義資料表中的 DECIMAL 欄:

decimal(precision, scale)
precision

整個值中有效位數的總數:小數點兩邊的位數數量。例如,數字 48.2891 的精確度 (有效位數) 為 6,小數位數為 4。如果未指定,預設的精確度為 18,最高精確度為 38。

如果輸入值中小數點左側的位數超過欄的精確度減去其小數位數,則無法將該值複製到欄中 (或插入或更新)。此規則適用於超出資料欄定義範圍之外的任何值。例如,numeric(5,2) 欄的值,其允許的範圍為 -999.99999.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)。負數值上限為 -9223372036854775807。例如,如果試圖插入數值 9999999999999999999 (19 個 9),將會造成溢位錯誤。無論小數點的位置何在, AWS Clean Rooms 可以表示為 DECIMAL 數值的最大字串是 9223372036854775807。例如,可以載入 DECIMAL(19,18) 資料欄的最大值為 9.223372036854775807

這些規則是因為以下原因:

  • 具有 19 個或更少有效位數的十進制值在內部存儲為 8 字節整數。

  • 具有 20 到 38 個有效位數的十進制值被存儲為 16 字節整數。

關於使用 128 位元 DECIMAL 或 NUMERIC 資料欄的備註

除非您確定應用程式需要該精確度,否則請勿任意指派最大有效位數給 DECIMAL 欄。128 位元值使用的磁碟空間是 64 位元值的兩倍,而且可能會減慢查詢執行時間。

浮點類型

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

REAL 表示單精度浮點格式,根據 IEEE 標準 754 用於浮點運算。它具有大約 6 位數的精確度,並且範圍約為 1E-37 到 1E+37。您也可以將此資料類型指定為 FLOAT4。

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