我目前正在尝试为Oracle数据库列构建一个约束。
ALTER TABLE section ADD CONSTRAINT section_days_chk CHECK (Days = 'M' OR Days = 'T' OR Days = 'W' OR Days = 'R' OR Days = 'F' OR Days = 'S' OR Days = 'U');
但是,我也需要约束来允许这些字符的任何组合。
我一直试图弄清楚如何使用正则表达式“like”约束来做到这一点,而不允许任何其他字符。例如,只允许字符M或T或W或R或F或S或U或字母的任何组合,如“MWF”或“TR”或“M”。我一直在找一个会限制这样输入的例子。
这是我尝试过的:
ALTER TABLE section ADD CONSTRAINT section_days_chk CHECK (regexp_like(Days,'[MTWRFSU]'));
但它允许任何字母,只要它们附加到集合中包含的字母,如“MD”。
有什么想法吗?我一直在寻找几天,这项任务似乎并不常见。我发现的所有例子都假设您正在寻找包含某个字符的单词。
答案 0 :(得分:2)
尝试使用以下一个
REGEXP_LIKE (Days, '^[MTWRFSU]+$')
<强>解释强>
^
和$
是主播。他们说你的字符串应该匹配本身。
+
表示one or many
。因此,[MTWRFSU]
类中的一个或多个字符可以组合在一起。如果添加任何其他字符,匹配将废弃