检查SQL中的确切数字

时间:2018-04-11 20:28:33

标签: sql oracle

当我在表格中插入一个数字时,我需要检查一下这个数字的某些数字是否满足几个约束条件。有没有办法可以做到这一点?
例如,在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

感谢您的任何建议。

3 个答案:

答案 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)

在大多数情况下,最好使用标准字符串函数和运算符(INSTRSUBSTRLIKE等)而不是正则表达式解决方案,这是更多的时间和资源-consuming。仅对复杂问题使用正则表达式,标准函数要么根本不起作用,要么提供难以编写和维护的解决方案。

在这种情况下,一个简单的解决方案是

ALTER TABLE Person 
      ADD CONSTRAINT Check_id CHECK ( 0 NOT IN (SUBSTR(id, 2, 1), SUBSTR(id, 3, 1)) );