本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
數值類型
數值資料類型包括整數、小數和符點數。
整數類型
使用 SMALLINT、INTEGER 和 BIGINT 資料類型來儲存各種範圍的整數。您無法將值儲存在每個類型的允許範圍之外。
名稱 | 儲存 | 範圍 |
---|---|---|
SMALLINT | 2 位元組 | -32768 到 +32767 |
整數或整數 | 4 位元組 | -2147483648 到 +2147483647 |
BIGINT | 8 位元組 | -9223372036854775808 到 9223372036854775807 |
DECIMAL 或 NUMERIC 類型
使用 DECIMAL 或 NUMERIC 資料類型,以使用者定義的精確度來儲存數值。DECIMAL 和 NUMERIC 關鍵字可互換使用。在本文件中,小數是此資料類型的首選用詞。數值一詞通常是用來指稱整數、小數和浮點資料類型。
儲存 | 範圍 |
---|---|
變數,未壓縮的 DECIMAL 類型最多 128 位元。 | 128 位元帶正負號的整數,具備最高 38 個位數的精確度。 |
藉由指定 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)。負數值上限為 -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。