Oracle SQL:在Regexp中搜索$

时间:2018-02-01 04:05:48

标签: regex oracle regexp-like

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

我在下面有以下查询:

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

这应该能够识别具有" $ NA"的响应。大多数回复都包含$的组合,后跟数值和$的文本值。

我尝试了上述查询的几种变体而没有任何成功。有什么想法吗?

3 个答案:

答案 0 :(得分:0)

您可以使用:

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

答案 1 :(得分:0)

您可以使用:

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

答案 2 :(得分:0)

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

由于空格字符有资格作为非数字字符,因此第二个空格可以产生误报"对于您要查找的数据集。

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