CONSTRAINT proper_matricula CHECK (matricula ~ '[a-Za-Z][a-Za-Z][0-9][0-9][a-Za-Z][a-Za-Z]' OR '[0-9][0-9][a-Za-Z][a-Za-Z][0-9][0-9]')
);
尝试执行约束检查,查看给定的车牌是否有效。它给出了这个错误错误:布尔类型的输入语法无效:"[0-9][0-9][a-Za-Z][a-Za-Z][0-9] ">
首先:
CONSTRAINT proper_matricula
CHECK
(
matricula ~ '[a-Za-Z][a-Za-Z][0-9][0-9][a-Za-Z][a-Za-Z]'
OR '[0-9][0-9][a-Za-Z][a-Za-Z][0-9][0-9]'
)
); -- <<=== Extra ')'
如果你的代码格式正确,你可以很容易地看到在你的CONSTRAINT
声明中有一个额外的)
(右括号)-只需删除它,这将有助于。
但是,请参阅下面也需要更正的其他错误!
CONSTRAINT
声明前无ALTER TABLE test ADD
最后,您需要复制字段名- ' OR materials = '....'
(
matricula ~ '...'
OR
matricula ~ '...'
)
看这里的小提琴
编辑-回应OP的评论
你也可以这样做:
CREATE TABLE test_2
(
matricula TEXT NOT NULL
CONSTRAINT proper_matricula
CHECK
(
matricula ~ '[a-Za-Z][a-Za-Z][0-9][0-9][a-Za-Z][a-Za-Z]'
OR
matricula ~ '[0-9][0-9][a-Za-Z][a-Za-Z][0-9][0-9]'
)
);
CONSTRAINT
必须是中的TABLE
定义本身,否则你必须指定
ALTER TABLE test ADD...
否则,服务器如何知道您引用的是哪个TABLE
-它可能是数据库/模式中的任何表?
小提琴。
最后,正如已经指出的,您应该始终在你的问题中包含尽可能多的相关信息。在这个问题中,知道CHECK
是否已经是TABLE
定义的一部分是很有用的或一段独立的代码。顺便说一句,我现在已经涵盖了这两种情况!