我需要在我的专栏中明确限制五个特殊字符:句点、逗号、单引号、双引号和美元符号。
我知道我可以使用以下内容来只允许字母数字字符,但我也需要能够接受其他特殊字符。
-- 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]%')
发布于 2019-06-27 08:56:45
下面是一个例子。我有一个表,其中的一列包含Enzyme Commission数字,通常的形式是1.1.1.1
--即四个以句点分隔的整数,其中的整数可以是1-3位数字(例如,4.2.3.181
...)。
我可以通过以下CHECK约束来确保该模式:
...
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会抛出一个错误,类似于:
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).
https://stackoverflow.com/questions/46673217
复制相似问题