Oracle:使用正则表达式从查询中排除结果
Posted
技术标签:
【中文标题】Oracle:使用正则表达式从查询中排除结果【英文标题】:Oracle: Exclude Results From Query Using a Regular Expression 【发布时间】:2010-06-28 20:36:36 【问题描述】:使用 linq (.net 3.5 +) 和 predicate builder,我是这样做的:
var startsWith3Chars = new System.Text.RegularExpressions.Regex(@"^[a-zA-Z]3\-", System.Text.RegularExpressions.RegexOptions.Compiled);
wherePredicate = wherePredicate.And(x => startsWith3Chars.Matches(x.MATERIALUID).Count > 0);
但现在我需要在命令文本中进行过滤。
有没有办法使用 REGEXP_INSTR 之类的东西来限制基于正则表达式的结果?
【问题讨论】:
【参考方案1】:鉴于此测试数据...
SQL> select name
2 from t23
3 /
NAME
----------
SAM-I-AM
MR KNOX
X11
CAT
LORAX
SQL>
...以下查询使用 REGEXP_LIKE() 返回前四个字符仅包含字母或连字符的记录:
SQL> select name
2 from t23
3 where regexp_like(name, '^[[:alpha:]\-]4')
4 /
NAME
----------
SAM-I-AM
LORAX
SQL>
我们也可以使用具有相同基本模式的 REGEXP_INSTR()(我已经删除了前导插入符):
SQL> select name
2 from t23
3 where regexp_instr(name, '[[:alpha:]\-]4', 1) = 1
4 /
NAME
----------
SAM-I-AM
LORAX
SQL>
Oracle 在 10g 版本中为其 SQL 添加了完整的正则表达式支持。 Find out more.
【讨论】:
不幸的是使用旧版本的 Oracle。不过谢谢,正是我想要的。【参考方案2】:REGEXP_LIKE怎么样?
【讨论】:
APC sort of 1 举了一个例子。感谢您的回复。 没问题 - 如果 APC 有时间提供示例,那么功劳应该去那里。如果您急需这些信息,那么我提供的信息会让您到达那里。一切都是关于解决方案,而不是评分。以上是关于Oracle:使用正则表达式从查询中排除结果的主要内容,如果未能解决你的问题,请参考以下文章
通过 Oracle 的 REGEXP_SUBSTR 排除正则表达式中的一系列字符
oracle10g中,如何查询正则表达式匹配指定字符串的匹配个数?