DECIMAL数据类型存储精确的定点数。 当保留精确的精度很重要时可以使用此类型,例如,使用货币数据。

别名

在CockroachDB中,下列为DECIMAL的别名:

精度和规模

使用DECIMAL(precision, scale)限制decimal列,其中precision是小数点左侧和右侧的最大位数,scale是小数点右侧的精确位数。precision不能小于scale。使用DECIMAL(precision) 等效于 DECIMAL(precision, 0).

当插入十进制(decimal)值时:

语法

数值文本(numeric literal)可以作为DECIMAL类型值的输入。 例如:1.414-1234

正无穷大,负无穷大和NaN(非数字)的特殊IEEE754值无法直接使用数字文字输入,必须使用解释的文字或字符串文字的显式转换进行转换。

可以识别以下值:

Syntax Value
inf, infinity, +inf, +infinity +∞
-inf, -infinity -∞
nan NaN (Not-a-Number)

示例:

大小

DECIMAL值的大小是可变的,从9字节开始。建议将值保持在64千字节以下,以确保性能。如果超过该阈值,写入放大和其他因素可能导致明显的性能退化。

示例

> CREATE TABLE decimals (a DECIMAL PRIMARY KEY, b DECIMAL(10,5), c NUMERIC);

> SHOW COLUMNS FROM decimals;
+-------+---------------+-------+---------+
| Field |     Type      | Null  | Default |
+-------+---------------+-------+---------+
| a     | DECIMAL       | false | NULL    |
| b     | DECIMAL(10,5) | true  | NULL    |
| c     | DECIMAL       | true  | NULL    |
+-------+---------------+-------+---------+
> INSERT INTO decimals VALUES (1.01234567890123456789, 1.01234567890123456789, 1.01234567890123456789);

> SELECT * FROM decimals;
+------------------------+---------+-----------------------+
|           a            |    b    |         c             |
+------------------------+---------+-----------------------+
| 1.01234567890123456789 | 1.01235 | 1.0123456789012346789 |
+------------------------+---------+-----------------------+
# The value in "a" matches what was inserted exactly.
# The value in "b" has been rounded to the column's scale.
# The value in "c" is handled like "a" because NUMERIC is an alias.

支持的转换

可以将十进制值转换为以下任何数据类型:

Type Details
INT 将截断小数的精度
FLOAT 丢失精度,如果值太大,可能会向上+/-无穷大,如果值太小,则可以+/- 0
BOOL 0转换为false; 所有其他值转换为true
STRING ––

See Also

Data Types