【发布时间】:2020-10-24 04:27:41
【问题描述】:
我正在使用 Oracle SQL,并且我想添加一个 CHECK 约束,以便在创建表时检查正则表达式。但是,REGEXP_LIKE 函数的行为与在线 RegEx 测试工具不同。
假设我想创建一个名为Testing 的表,其中只有一个名为roomNo 的属性。我希望roomNo 只存储 4 个数字,可选地后跟一个大写字母(例如,1234、1234A):
CREATE TABLE Testing (
roomNo char(5),
CONSTRAINT check_roomNo CHECK (REGEXP_LIKE(roomNo, '^\d{4}[A-Z]?$'))
);
insert into Testing values ('1234X');
insert into Testing values ('1234'); -- Unexpected error here
当我运行这个脚本时,我可以成功地将1234X 插入到表中,但是Oracle SQL 在插入1234 时会抛出一个错误:
Error starting at line : 5 in command -
insert into Testing values ('1234')
Error report -
ORA-02290: check constraint (USER.CHECK_ROOMNO) violated
我不太明白为什么这是一个错误,因为当我在在线 RegEx 测试工具中测试 RegEx ^\d{4}[A-Z]?$ 时,它可以匹配 1234X 和 1234。 Here is a link 到使用我在 REGEXP_LIKE 函数中使用的 RegEx 的 RegEx 测试工具。非常感谢!
【问题讨论】:
标签: sql regex oracle check-constraints