insert into test values (-0.005) returning *;
--ERROR: new row for relation "test" violates check constraint "test_yournum_check"
--DETAIL: Failing row contains (-0.01).
insert into test values (1.005) returning *;
--ERROR: new row for relation "test" violates check constraint "test_yournum_check"
--DETAIL: Failing row contains (1.01).
insert into test values (11) returning *;
--ERROR: numeric field overflow
--DETAIL: A field with precision 3, scale 2 must round to an absolute value less than 10^1.
insert into test values ('Infinity'::float) returning *;
--ERROR: numeric field overflow
--DETAIL: A field with precision 3, scale 2 cannot hold an infinite value.
insert into test values ('NaN'::float) returning *;
--ERROR: new row for relation "test" violates check constraint "test_yournum_check"
--DETAIL: Failing row contains (NaN).
2条答案
按热度按时间4xrmg8kj1#
假设您指定的范围包含两个界限,请使用decimal(3,2)或numeric(3,2)。加入CHECK条件约束以拒绝负数。Online demo。
测试(注意舍入行为):
拒收示例:
x8goxv8g2#
我个人会使用
smallint
和,存储乘以100的值,并添加一个检查约束,以确保该值在0和100之间。这将最小化存储空间,并使计算更快。当然,不利的一面是你的一些计算必须改变。加法很简单,但你必须在两个数相乘后除以100。