【问题标题】:Oracle SQL: Searching for $ in RegexpOracle SQL:在正则表达式中搜索 $
【发布时间】:2018-07-11 07:57:06
【问题描述】:

我想搜索我的响应字段以查找美元符号 $ 后面没有数字值的任何实例。数值前 1 或 2 个空格是可以的,但 $ 后面不应该有任何文本值。

我有以下查询:

SELECT * FROM RESPONSES
WHERE (regexp_like(response, '(\$)(\s){1,2}[^0-9]'));

这应该能够识别具有“$ NA”的响应。大多数响应将包含 $ 后跟数字值和 $ 文本值的组合。

我尝试了上述查询的几种变体,但均未成功。有什么想法吗?

【问题讨论】:

    标签: regex oracle regexp-like


    【解决方案1】:

    你可以使用这个:

    SELECT  *
    FROM dual
    WHERE
    SIGN(REGEXP_INSTR (RESPONSE, '(\$)(\s){2}[^0-9]'))=0 
    

    【讨论】:

      【解决方案2】:

      你可以使用:

      select * from responses where regexp_like(a, '^\$\s')

      获取值以$ 符号开头,后跟至少一个空格作为连续字符。

      with t as
      (
       select '$ 524' as a from dual union all 
       select '$524' as a from dual union all 
       select '$  s67e' as a from dual union all  
       select '# 67e' as a from dual union all    
       select '$s67e' as a from dual union all
       select '$#67e' as a from dual 
       ) 
      select * from t where regexp_like(a, '^\$\s')
       A
      ---- 
      $ 524
      $ s67e
      

      Demo

      【讨论】:

        【解决方案3】:

        在否定字符集中包含空格字符

        由于空格字符符合非数字字符的条件,第二个空格可以为您要查找的数据集提供“误报”。

        SCOTT@db>WITH smple AS (
          2      SELECT
          3          '23  dkf $ 1' response
          4      FROM
          5          dual
          6      UNION ALL
          7      SELECT
          8          '23 dkfg gjg $  4'
          9      FROM
         10          dual
         11      UNION ALL
         12      SELECT
         13          '$ NA'
         14      FROM
         15          dual
         16  ) SELECT
         17      s.*
         18    FROM
         19      smple s
         20    WHERE
         21      ( REGEXP_LIKE ( s.response,
         22      '\$\s{1,2}[^ 0-9]+' ) );
        RESPONSE
        ----------
        $ NA
        

        【讨论】:

          猜你喜欢
          • 2021-05-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-12-20
          • 2019-06-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多