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

Nyi*_*Aye 8 postgresql signed types postgresql-9.1

在PostgreSQL中,我想存储已签名的值-999.9- 9999.9.我可以用numeric(5.1)它吗?

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

Erw*_*ter 11

您当然可以使用精度为5且比例为1 的任意精度类型numeric,就像@Simon评论一样,但没有语法错误.在类型修饰符中使用逗号(,)而不是点(.):

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
Run Code Online (Sandbox Code Playgroud)

字符串文字中的减号和点不计入允许的有效位数最大值(precision).
如果您不需要限制长度,请使用numeric.
如果需要强制执行最小值和最大值,请添加检查约束:

CHECK (nr_column BETWEEN -999.9 AND 9999.9)
Run Code Online (Sandbox Code Playgroud)

numeric准确地存储您的号码.如果您不需要绝对精度并且微小的舍入错误没有问题,您也可以使用其中一个浮点类型double precision(float8)或real(float4).

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

手册中数字类型的详细信息.