代码之家  ›  专栏  ›  技术社区  ›  Merritt

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

  •  3
  • Merritt  · 技术社区  · 15 年前

    使用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);
    

    但是现在我需要在命令文本中进行过滤。

    Is there a way to use something like REGEXP_INSTR to limit the results based on a regular expression?

    2 回复  |  直到 15 年前
        1
  •  2
  •   APC    15 年前

    给定此测试数据…

    SQL> select name
      2  from t23
      3  /
    
    NAME
    ----------
    SAM-I-AM
    MR KNOX
    X11
    CAT
    LORAX
    
    SQL>
    

    …the following query uses REGEXP_LIKE() to return records whose first four characters contain only letters or hyphens:

    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 .

        2
  •  2
  •   DCookie    15 年前

    怎么样 REGEXP_LIKE ?