Oracle:使用正则表达式从查询中排除结果

时间:2010-06-28 20:36:37

标签: sql regex oracle

使用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这样的东西来限制基于正则表达式的结果?

2 个答案:

答案 0 :(得分:2)

REGEXP_LIKE怎么样?

答案 1 :(得分:2)

鉴于此测试数据......

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