Postgres数据类型NUMERIC可以存储签名值吗?

时间:2015-04-01 02:39:13

标签: postgresql types postgresql-9.1 signed

在PostgreSQL中,我想存储带符号的值-999.9 - 9999.9。 我可以使用numeric(5.1)吗?

或者我应该使用什么类型?

1 个答案:

答案 0 :(得分:9)

您当然可以使用精度为5且范围为1 arbitrary precision type numericjust 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 precisionfloat8)或real({{1} })。

或者,由于您只允许一个小数十进制数,您可以乘以10并使用float4,这将是最有效的存储:4个字节,没有舍入错误和最快的处理。只需正确使用并记录号码即可。

Details for numeric types in the manual.