首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >限制特定字符的PostgreSQL检查约束

限制特定字符的PostgreSQL检查约束
EN

Stack Overflow用户
提问于 2017-10-11 02:08:49
回答 1查看 1.6K关注 0票数 2

我需要在我的专栏中明确限制五个特殊字符:句点、逗号、单引号、双引号和美元符号。

我知道我可以使用以下内容来只允许字母数字字符,但我也需要能够接受其他特殊字符。

代码语言:javascript
复制
-- Check Constraint to only Allow Numbers & Alphabets 
ALTER TABLE Table_Name  
ADD CONSTRAINT ck_No_Special_Characters 
CHECK (Column_Name NOT LIKE '%[^A-Z0-9]%')  
EN

回答 1

Stack Overflow用户

发布于 2019-06-27 08:56:45

下面是一个例子。我有一个表,其中的一列包含Enzyme Commission数字,通常的形式是1.1.1.1 --即四个以句点分隔的整数,其中的整数可以是1-3位数字(例如,4.2.3.181 ...)。

我可以通过以下CHECK约束来确保该模式:

代码语言:javascript
复制
...
ec_num TEXT NOT NULL CHECK (ec_num ~ '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}')
...

哪里

  • 代字号(~)是一个正则表达式匹配(“相似性比较”)运算符,在参考文献中进行了描述。1和2
  • [0-9]匹配任何单个数字,由{n}修改,它指定前面表达式的重复程度--参见参考文献。3
  • 句号是\-escaped,否则它将匹配任何单个字符--同样,请参见ref 3

如果我试图插入一个格式错误的数字,例如1.1.1,4 (注意4前面的逗号),那么PostgreSQL会抛出一个错误,类似于:

代码语言:javascript
复制
ERROR:  23514: new row for relation "kegg_enzymes" violates
        check constraint "kegg_enzymes_ec_num_check"
DETAIL:  Failing row contains
         (4, 1.1.1,4, (r,r)-butanediol dehydrogenase, (R,R)-butanediol dehydrogenase).

1

2

3

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46673217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档