【问题标题】:Constrain digits postgresql约束数字postgresql
【发布时间】:2017-01-18 19:03:00
【问题描述】:

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

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

但是,使用上述语法,当我插入一个 9 位数字时不会产生错误:

INSERT INTO mytable (mynum) VALUES ('123456789');

为什么?

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

【问题讨论】:

  • 有一个带有 ` (mynum >=10000000 AND mynum
  • 没有。因为数字必须有前导零。
  • 填充前导零通常是一种表示功能。但也许不是你的情况。
  • 您需要用^$ 将正则表达式括起来,如下所示:'^[0-9]{8}$'。但是您不应该在这里真正使用正则表达式。只需使用integer 作为类型并对其使用mynum BETWEEN 0 AND 99999999 约束。

标签: postgresql


【解决方案1】:

用途:

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

the documentation:

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

【讨论】:

  • 感谢克林!是否有一个“LIKE 模式”可以在我不必锚定正则表达式的情况下实现相同的目标?
  • 不,like 不能这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多