在 PostgreSQL 中,我想存储有符号值 -999.9
- 9999.9
。
我可以为此使用 numeric(5.1)
吗?
或者我应该使用什么类型?
最佳答案
您当然可以使用 arbitrary precision type numeric
精度为 5,小数位数为 1,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
字符串文字中的减号和点不计入允许的最大有效数字(精度
)。
如果不需要限制长度,就用numeric
即可。
如果您需要强制执行最小值和最大值,请添加 check constraint :
CHECK (nr_column BETWEEN -999.9 AND 9999.9)
numeric
存储您的号码准确。如果您不需要绝对精度并且微小的舍入误差没有问题,您还可以使用浮点类型之一double precision
(float8
) 或 真实
(float4
)。
或者,由于您只允许一个小数位,您可以乘以 10 并使用 integer
,这将是最有效的存储:4 字节,无舍入错误和最快的处理。只需正确使用并记录该号码即可。
关于postgresql - Postgres 数据类型 NUMERIC 可以存储有符号值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29381974/