我目前正在尝试创建一个常规表达式以用于我的Oracle数据库约束中,该表达式可以检查字符串的所有单词是否均以大写字母开头。我已经尝试过使用诸如initcap之类的功能,但是它实际上并没有按预期工作,因为当我尝试插入包含字母“?”或acent的值时会出错。您能帮我吗?
您可以使用检查约束和正则表达式来执行此操作,例如:
alter table mytable
add constraint myconstraint
check (not regexp_like(mycol, '(^|\W)[A-Z]'))
Regexp (^|\W)[A-Z]
的意思是:字符串的开头或非单词字符,后跟一个大写的值。
如@kfinity所评论,您也可以使用正则表达式(^|\W)[[:upper:]]
,它应正确地捕获特殊的高位字符。
我思考您想要的检查约束更像这样:
check (not regexp_like(mycol, '(^|\W)[[:lower:]]'))