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