当我在表格中插入一个数字时,我需要检查一下这个数字的某些数字是否满足几个约束条件。有没有办法可以做到这一点?
例如,在Python中,我可以使用索引number[n]
或regex
。我想过使用LIKE
,但我读过LIKE
仅用于WHERE
条款,所以它不会起作用。
简单代码:
CREATE TABLE Person(
id INT NOT NULL,
name VARCHAR(40)
)
-- this constraint is just how I would imagine it
ALTER TABLE Person ADD CONSTRAINT Check_id CHECK (id[2] <> 0 AND id[3] <> 0);
INSERT INTO Person(1234, 'John'); -- not error
INSERT INTO Person(1204, 'Mike'); -- error
感谢您的任何建议。
答案 0 :(得分:1)
你可以这样做:
ALTER TABLE Person ADD CONSTRAINT chk_person_id
CHECK (id not like '_0%' and id not like '__0%');
Oracle会将id
转换为like
的字符串。将id
表示为数字我真的不高兴。就个人而言,我认为将其表示为字符串会更好。
答案 1 :(得分:1)
您可以根据正则表达式进行检查,例如:检查最后两位数字是否为零:
check (regexp_like(to_char(id), '[^0][^0]$'))
[^0]
=不是零
$
=字符串结尾
或检查第2位和第3位不是零:
check (regexp_like(to_char(id), '^.[^0][^0]))
.
=任何角色
^
=字符串/数字的开头
答案 2 :(得分:0)
在大多数情况下,最好使用标准字符串函数和运算符(INSTR
,SUBSTR
,LIKE
等)而不是正则表达式解决方案,这是更多的时间和资源-consuming。仅对复杂问题使用正则表达式,标准函数要么根本不起作用,要么提供难以编写和维护的解决方案。
在这种情况下,一个简单的解决方案是
ALTER TABLE Person
ADD CONSTRAINT Check_id CHECK ( 0 NOT IN (SUBSTR(id, 2, 1), SUBSTR(id, 3, 1)) );