【问题标题】:Number Wildcard in Where ClauseWhere 子句中的数字通配符
【发布时间】:2012-03-14 06:19:45
【问题描述】:

我正在尝试将数字通配符添加到查询中以查找特定位置的数字。查询看起来像这样:

SELECT SUBMITTER
  FROM BASE_ELEMENT
 WHERE SUBMITTER LIKE 'm_%';

这个查询的问题是它会选择所有以“m”开头并且在第二个位置有一个字符的东西。我需要像 Unix 通配符一样工作的东西:

'm[0-9]*'

我希望它包含 m0、m1、m2 等,但排除 ma、mb、mc 等。

我将如何在 Oracle 10g 中完成此任务?

【问题讨论】:

    标签: sql regex database oracle


    【解决方案1】:

    你可以使用regexp_like:

    where regexp_like(submitter, '^m\d')
    

    【讨论】:

      【解决方案2】:

      在 10G 中,您有 wonderregular expressions。因此,您的查询可能是:

      select submitter
        from base_element
       where regexp_like(submitter, '^m[[:digit:]]')
      

      ^ 将表达式锚定到行首,[[:digit:]] 匹配任何数字。

      【讨论】:

      • 感谢您的参考。我不知道函数“regexp_like”。这解决了我的问题。
      • 没问题@jmquigley;如果可以避免,我唯一的建议是不要依赖正则表达式。尽管它们非常适合这种情况,但它们很容易变得过于复杂。
      【解决方案3】:

      尝试使用 REGEXP_LIKE 函数 (http://docs.oracle.com/cd/B19306_01/appdev.102/b14251/adfns_regexp.htm)。

      您的情况可以这样解决:

      select submitter from base_element where regexp_like( submitter, '^m[0-9]' );

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-19
        • 1970-01-01
        • 1970-01-01
        • 2013-10-18
        • 2017-09-15
        • 2013-08-24
        相关资源
        最近更新 更多