Oracle正则表达式约束

时间:2016-03-17 18:26:28

标签: regex oracle

我目前正在尝试为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”。

有什么想法吗?我一直在寻找几天,这项任务似乎并不常见。我发现的所有例子都假设您正在寻找包含某个字符的单词。

1 个答案:

答案 0 :(得分:2)

尝试使用以下一个

REGEXP_LIKE (Days, '^[MTWRFSU]+$')

<强>解释

  • ^$是主播。他们说你的字符串应该匹配本身

  • +表示one or many。因此,[MTWRFSU]类中的一个或多个字符可以组合在一起。如果添加任何其他字符,匹配将废弃

Check REGEXP_LIKE documentation.