使用正则表达式的约束

问题描述 投票:1回答:2

我目前正在尝试创建一个常规表达式以用于我的Oracle数据库约束中,该表达式可以检查字符串的所有单词是否均以大写字母开头。我已经尝试过使用诸如initcap之类的功能,但是它实际上并没有按预期工作,因为当我尝试插入包含字母“?”或acent的值时会出错。您能帮我吗?

sql regex oracle oracle11g constraints
2个回答
0
投票

您可以使用检查约束和正则表达式来执行此操作,例如:

alter table mytable
    add constraint myconstraint
    check (not regexp_like(mycol, '(^|\W)[A-Z]'))

Regexp (^|\W)[A-Z]的意思是:字符串的开头或非单词字符,后跟一个大写的值。

Demo on DB Fiddle


如@kfinity所评论,您也可以使用正则表达式(^|\W)[[:upper:]],它应正确地捕获特殊的高位字符。


0
投票

思考您想要的检查约束更像这样:

check (not regexp_like(mycol, '(^|\W)[[:lower:]]'))
© www.soinside.com 2019 - 2024. All rights reserved.