如何统计Postgres整数数据类型中的位数?

时间:2015-08-12 07:50:53

标签: sql database postgresql postgresql-9.2

我需要在postgres中将'integer'类型字段中的位数限制为6或7。

基本上它应该接受123456或1234567但不应接受12345或12345678。 我怎么能实现这个?

2 个答案:

答案 0 :(得分:1)

使用

进行检查约束
check (value>99999 and value<=9999999)

答案 1 :(得分:1)

您可以使用floor(log(i)+1来获取数字中的位数(即base10日志)。

DB> CREATE TEMP TABLE t (
      i integer CONSTRAINT i_has_6_or_7_digits CHECK (floor(log(abs(i))+1) BETWEEN 6 AND 7)
    );
CREATE TABLE
Time: 5,676 ms

DB> INSERT INTO t VALUES (123456), (1234567);
INSERT 0 2
Time: 0,471 ms

DB> INSERT INTO t VALUES (12345);
ERROR:  23514: new row for relation "t" violates check constraint "i_has_6_or_7_digits"
DETAIL:  Failing row contains (12345).
SCHEMA NAME:  pg_temp_2
TABLE NAME:  t
CONSTRAINT NAME:  i_has_6_or_7_digits
LOCATION:  ExecConstraints, execMain.c:1661
Time: 0,468 ms

DB> INSERT INTO t VALUES (12345678);
ERROR:  23514: new row for relation "t" violates check constraint "i_has_6_or_7_digits"
DETAIL:  Failing row contains (12345678).
SCHEMA NAME:  pg_temp_2
TABLE NAME:  t
CONSTRAINT NAME:  i_has_6_or_7_digits
LOCATION:  ExecConstraints, execMain.c:1661
Time: 0,215 ms