【问题标题】:Oracle Regular Expression constraintOracle 正则表达式约束
【发布时间】:2016-03-18 03:58:31
【问题描述】:

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

有什么想法吗?找了几天,这个任务好像不是很常见。我找到的所有示例都假设您正在查找其中包含某个字符的单词。

【问题讨论】:

  • 在在线对话中使用全部大写被视为大喊大叫。请编辑您的标题,使其不那么响亮。谢谢!
  • 已经够大喊大叫了,人们都想睡觉了
  • 抱歉,我在数据库查询中经常使用大写字母。

标签: regex oracle


【解决方案1】:

尝试使用以下一个

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

说明:

  • ^$ 是锚点。他们说你的字符串应该是一个匹配本身

  • + 的意思是one or many。因此[MTWRFSU] 类中的一个或多个字符可以聚集在一起。如果添加任何其他字符,匹配将被丢弃

Check REGEXP_LIKE documentation.

【讨论】:

  • 完美运行。谢谢你。因此,如果我的理解正确,那么 ^ 和 $ 使得在集合之前或之后不能添加其他字符,并且 + 确保没有未经批准的字符可以位于一组已批准字符的中间?比如“MJF”之类的?
  • @RSmoove:添加了解释。
猜你喜欢
  • 1970-01-01
  • 2020-05-10
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-10
  • 2011-06-01
相关资源
最近更新 更多