约束数字postgresql

约束数字postgresql,postgresql,Postgresql,我想限制一个数字,使它严格地有8位。。。。不多也不少。如果数字长度小于8位,则有前导零 ALTER TABLE mytable ADD CONSTRAINT digit_chk CHECK (mynum ~ '[0-9]{8}'); 但是,使用上述语法,插入9位数字时不会产生错误: INSERT INTO mytable (mynum) VALUES ('123456789'); 为什么? 我应该注意,当我插入少于8位数字时,会产生一个错误。使用: ALTER TABLE mytable A

我想限制一个数字,使它严格地有8位。。。。不多也不少。如果数字长度小于8位,则有前导零

ALTER TABLE mytable ADD CONSTRAINT digit_chk CHECK (mynum ~ '[0-9]{8}');
但是,使用上述语法,插入9位数字时不会产生错误:

INSERT INTO mytable (mynum) VALUES ('123456789');
为什么?

我应该注意,当我插入少于8位数字时,会产生一个错误。

使用:

ALTER TABLE mytable ADD CONSTRAINT digit_chk CHECK (mynum ~ '^[0-9]{8}$');
Per:

与类似模式不同,正则表达式可以匹配字符串中的任何位置,除非正则表达式显式锚定到字符串的开头或结尾

使用:

Per:

与类似模式不同,正则表达式可以匹配字符串中的任何位置,除非正则表达式显式锚定到字符串的开头或结尾


因为数字必须有前导零。填充前导零通常是一个表示函数。但在您的情况下可能不是。您需要用
^
$
将正则表达式括起来,如:
'^[0-9]{8}$'
。但您不应该在这里真正使用正则表达式。只需对类型使用
integer
,并对其使用介于0和99999999之间的
mynum约束。具有带`(mynum>=10000000和mynum No。因为数字必须有前导零。填充前导零通常是一个表示函数。但可能不是在您的情况下。您需要用
^
$
将正则表达式括起来,如下所示:
'^[0-9]{8}$'
。但您不应该在这里真正使用正则表达式。只需对类型使用
integer
,并在其上使用介于0和999999999之间的
mynum约束。谢谢Klin!有“相似模式”吗如果我不锚定正则表达式,这将实现同样的效果?不,你不能使用
like
。谢谢Klin!是否有一种“like模式”可以实现同样的效果而不必锚定正则表达式?不,你不能使用
like