如何更改列以接受某些特定格式的值?

时间:2019-03-28 23:03:02

标签: sql postgresql check-constraints

我的表中有一列显示电话号码,我想添加一个约束,其中该号码必须采用+cod.country-cod.local-num.local之类的特定格式。例如:'+54-351-4350114'

然后我要添加一个约束,其中num.local必须至少包含7位数字。

1 个答案:

答案 0 :(得分:1)

我猜您正在寻找Postgres CHECK constraint:这种约束确实接受了SIMILAR TO运算符的正则表达式:

ALTER TABLE mytable ADD CONSTRAINT phone_number_check CHECK(
    phone_number SIMILAR TO '\+\d+-\d+-\d{7,}'
)

正则表达式说明:

\+        the + sign
\d+       at least one digit
-         the - sign
\d+       at least one digit
-         the - sign
\d{7,}    at least 7 digits

这将允许诸如'+54-351-1234567'之类的值,同时例如拒绝'+54-351-123456'。您可以使用Postgres Regular Expressions根据自己的要求自由调整正则表达式。

Demo on DB Fiddle