postgresql - Postgres 数据类型 NUMERIC 可以存储有符号值吗?

标签 postgresql types numeric postgresql-9.1 signed

在 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 字节,无舍入错误和最快的处理。只需正确使用并记录该号码即可。

Details for numeric types in the manual.

关于postgresql - Postgres 数据类型 NUMERIC 可以存储有符号值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29381974/

相关文章:

python - Python 中舍入 float 的问题

reflection - 为什么reflect包里没有 "byte"kind?

sql - 从 PostgreSQL 表中查找具有最新日期的条目

postgresql - 当给定列与 PostgreSQL 中的谓词匹配时,考虑行是唯一的

postgresql - 在 Postgres 中连接多个数组

react-native - React Native - 如何仅键入数字键盘(不带标点符号)

python - Pandas 保留数字部分

macos - 导入数据库转储— PSQL

objective-c - 定义为返回 id 的 SEL 如何表示返回 double 的方法?

rust - 是否有指定数字功能的任何特征?