在PostgreSQL中,我想存储带符号的值-999.9
- 9999.9
。
我可以使用numeric(5.1)
吗?
或者我应该使用什么类型?
答案 0 :(得分:9)
您当然可以使用精度为5且范围为1 arbitrary precision type numeric
的just like @Simon commented,但不会出现语法错误。在类型修饰符中使用逗号(,
)代替点(.
):
SELECT numeric(5,1) '-999.9' AS nr_lower
, numeric(5,1) '9999.9' AS nr_upper;
nr_lower | nr_upper
----------+----------
-999.9 | 9999.9
字符串文字中的减号和点数不计入允许的有效位数最大值(precision
)。
如果您不需要限制长度,请使用numeric
如果您需要强制执行最小值和最大值,请添加check constraint:
CHECK (nr_column BETWEEN -999.9 AND 9999.9)
numeric
存储您的号码完全。如果您不需要绝对精度并且微小舍入错误没有问题,您也可以使用其中一种浮点类型double precision
(float8
)或real
({{1} })。
或者,由于您只允许一个小数十进制数,您可以乘以10并使用float4
,这将是最有效的存储:4个字节,没有舍入错误和最快的处理。只需正确使用并记录号码即可。