【问题标题】:Oracle: Exclude Results From Query Using a Regular ExpressionOracle:使用正则表达式从查询中排除结果
【发布时间】: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 之类的东西来限制基于正则表达式的结果?

【问题讨论】:

    标签: sql regex oracle


    【解决方案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 有时间提供示例,那么功劳应该去那里。如果您急需这些信息,那么我提供的信息会让您到达那里。一切都是关于解决方案,而不是评分。
    猜你喜欢
    • 2019-08-20
    • 1970-01-01
    • 2022-12-09
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-03
    相关资源
    最近更新 更多